Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在没有Numpy数组的情况下获取ValueError_Python_Python 3.x_Tensorflow_Machine Learning_Keras - Fatal编程技术网

Python 在没有Numpy数组的情况下获取ValueError

Python 在没有Numpy数组的情况下获取ValueError,python,python-3.x,tensorflow,machine-learning,keras,Python,Python 3.x,Tensorflow,Machine Learning,Keras,我正在使用keras构建一个模型来描述图像(基本上是给它们一个描述),但是当我执行这个过程时,我在训练开始之前就遇到了一个错误。我使用的是tensorflow_gpu(2.0)和最新的keras版本。这是我得到的错误(稍微缩短)=> 我认为这可能是一个错误。如果有人要求提供一些额外的信息,我可以删掉这个问题。谷歌搜索时,有人提到“Numpy数组”没有结构化,或者没有指定数据类型。但是,我的代码不包含Numpy数组,因此我不确定如何继续。 先发制人 以下是代码(根据makis的要求)注意,我使用的

我正在使用keras构建一个模型来描述图像(基本上是给它们一个描述),但是当我执行这个过程时,我在训练开始之前就遇到了一个错误。我使用的是tensorflow_gpu(2.0)和最新的keras版本。这是我得到的错误(稍微缩短)=>

我认为这可能是一个错误。如果有人要求提供一些额外的信息,我可以删掉这个问题。谷歌搜索时,有人提到“Numpy数组”没有结构化,或者没有指定数据类型。但是,我的代码不包含Numpy数组,因此我不确定如何继续。
先发制人 以下是代码(根据makis的要求)注意,我使用的是无法上传的Flickr8k数据集:===>

#This an Image Captioning Model developed by Neel Gupta :)
# IMPORTS GOES HERE -----------------
#import tensorflow as tf # Even tho we don't need it, It activates CUDA Functionality
from numpy import array
from pickle import load
from keras.preprocessing.text import Tokenizer
from keras.preprocessing.sequence import pad_sequences
from keras.utils import to_categorical
from keras.utils import plot_model
from keras.models import Model
from keras.layers import Input
from keras.layers import Dense
from keras.layers import LSTM
from keras.layers import Embedding
from keras.layers import Dropout
from keras.layers.merge import add
from keras.callbacks import ModelCheckpoint
from os import path

def load_doc(filename):
    file = open(filename, 'r')    #Opening the file.
    text = file.read()
    file.close()
    return text

def load_set(filename):
    doc = load_doc(filename) #Loading the document
    dataset = list()
    for line in doc.split('/n'):  #Weeding out the empty lines
        if len(line) < 1:
            continue
        identifier = line.split('.')[0]
        dataset.append(identifier)
    return set(dataset)

def load_clean_descriptions(filename, dataset):
    doc = load_doc(filename)
    descriptions = dict()
    for line in doc.split('\n'):
        # split line by white space
        tokens = line.split()
        # split id from description
        image_id, image_desc = tokens[0], tokens[1:]
        # skip images not in the set
        if image_id in dataset:
            # create list
            if image_id not in descriptions:
                descriptions[image_id] = list()
            # wrap description in tokens
            desc = '#Start# ' + ' '.join(image_desc) + ' #End#'
            descriptions[image_id].append(desc)
    return descriptions

def load_photo_features(filename, dataset):
    all_features = load(open(filename, 'rb'))
    features = {k: all_features[k] for k in dataset}
    return features

# convert a dictionary of clean descriptions to a list of descriptions
def to_lines(descriptions):
    all_desc = list()
    for key in dict.keys(descriptions):
        [all_desc.append(d) for d in descriptions[key]]
    return all_desc

def create_tokenizer(descriptions):
    lines = to_lines(descriptions)  #Fitting tokenizer
    tokenizer = Tokenizer()
    tokenizer.fit_on_texts(lines)
    return tokenizer

def max_length(descriptions):
    lines = to_lines(descriptions)
    return max(len(d.split()) for d in lines)

def create_sequences(tokenizer, max_length, desc_list, photo, vocab_size):
    X1, X2, y = list(), list(), list()
    for desc in desc_list:
        # encode the sequence
        seq = tokenizer.texts_to_sequences([desc])[0]
        # split one sequence into multiple X,y pairs
        for i in range(1, len(seq)):
            # split into input and output pair
            in_seq, out_seq = seq[:i], seq[i]
            # pad input sequence
            in_seq = pad_sequences([in_seq], maxlen=None)[0]  #Removed maxlen argument
            # encode output sequence
            out_seq = to_categorical([out_seq], num_classes=vocab_size)[0]
            # store
            X1.append(photo)
            X2.append(in_seq)
            y.append(out_seq)
    return array(X1), array(X2), array(y)

def define_model(vocab_size, max_length):
    # feature extractor model
    inputs1 = Input(shape=(4096,))
    fe1 = Dropout(0.5)(inputs1)
    fe2 = Dense(256, activation='relu')(fe1)
    # sequence model
    inputs2 = Input(shape=(1,))  #remove shape
    se1 = Embedding(vocab_size, 256, mask_zero=True)(inputs2)
    se2 = Dropout(0.5)(se1)
    se3 = LSTM(256)(se2)
    # decoder model
    decoder1 = add([fe2, se3])
    decoder2 = Dense(256, activation='relu')(decoder1)
    outputs = Dense(vocab_size, activation='softmax')(decoder2)
    # tie it together [image, seq] [word]
    model = Model(inputs=[inputs1, inputs2], outputs=outputs)
    # compile model
    model.compile(loss='categorical_crossentropy', optimizer='adam')
    # summarize model
    model.summary()
    #Uncomment the line below to deactivate/activate a graph being constructed==>
    #plot_model(model, to_file='model.png', show_shapes=True)
    return model

def data_generator(descriptions, photos, tokenizer, max_length, vocab_size):
    # loop for ever over images
    #This function is for saving ur RAM from utter destruction
    while 1:
        for key, desc_list in descriptions.items():
            # retrieve the photo feature
            photo = photos[key][0]
            in_img, in_seq, out_word = create_sequences(tokenizer, max_length, desc_list, photo, vocab_size)
            yield [[in_img, in_seq], out_word]

# HERE GOESETH THE IMPORTANT STUFF:-----------
filename = 'C:/Users/neelg/Documents/Atom_projects/Main/Flickr8k_text/Flickr_8k.trainImages.txt'
# Be sure to replace the file-name with ur own!!!
train = load_set(filename)
#print('Dataset:%d' % len (train))

train_descriptions = load_clean_descriptions('C:/Users/neelg/Documents/Atom_projects/Main/descriptions.txt', train)  #File name of clean descriptions
#print('Descriptions: train=%d'  %  len(train_descriptions))

#photo features
train_features = load_photo_features('C:/Users/neelg/Documents/Atom_projects/Main/features.pkl', train)
#print('Photos: train=%d' % len(train_features))
print("Loaded photo features!")
#Setting up the Tokenizer--
tokenizer = create_tokenizer(train_descriptions)
vocab_size = len(tokenizer.word_index) + 1
#print('Vocabulary Size: %d' % vocab_size)
print('\n', "Created tokenizers")
#max_length = max_length(descriptions)  #Getting the max_length

#THE MODEL
model = define_model(vocab_size, max_length)
print('\n', "model ready for some action!")
# train the model, run epochs manually and save after each epoch
epochs = 20
steps = len(train_descriptions)
# test the data generator
print("Giving the Data generator a workout :)")
generator = data_generator(train_descriptions, train_features, tokenizer, max_length, vocab_size)
inputs, outputs = next(generator)
print(inputs[0].shape)
print(inputs[1].shape)
print(outputs.shape)

for i in range(epochs):
    generator = data_generator(train_descriptions, train_features, tokenizer, max_length, vocab_size)
    model.fit_generator(generator, epochs=1, steps_per_epoch=steps, verbose=1)
    print('Starting the training.....')
    # save model
    model.save('model_' + str(i) + '.h5')
#这是Neel Gupta开发的图像字幕模型:)
#进口到这里-----------------
#将tensorflow作为tf导入,即使我们不需要它,它也会激活CUDA功能
从numpy导入数组
从pickle导入装载
来自keras.preprocessing.text导入标记器
从keras.preprocessing.sequence导入pad_序列
从keras.utils导入到_category
从keras.utils导入plot\u模型
从keras.models导入模型
从keras.layers导入输入
从keras.layers导入稠密
从keras.layers导入LSTM
从keras.layers导入嵌入
从keras.layers导入退出
从keras.layers.merge导入添加
从keras.callbacks导入模型检查点
从操作系统导入路径
def load_文件(文件名):
file=open(文件名为'r')#打开文件。
text=file.read()
file.close()文件
返回文本
def加载_集(文件名):
doc=load_doc(文件名)#加载文档
数据集=列表()
对于doc.split('/n')中的行:#剔除空行
如果len(line)<1:
持续
标识符=行。拆分('.')[0]
dataset.append(标识符)
返回集(数据集)
def load_clean_说明(文件名、数据集):
doc=加载文件(文件名)
descriptions=dict()
对于文档拆分('\n')中的行:
#按空格分割线
tokens=line.split()
#从描述中拆分id
image\u id,image\u desc=tokens[0],tokens[1:]
#跳过不在集合中的图像
如果数据集中的图像id为:
#创建列表
如果图像标识不在描述中:
描述[image_id]=列表()
#标记中的包装描述
desc='#开始#'+''.join(图像描述)+'#结束#'
描述[image\u id]。追加(desc)
返回说明
def加载照片功能(文件名、数据集):
所有功能=加载(打开(文件名为'rb'))
features={k:dataset}中k的所有_特征[k]
返回特性
#将干净描述的字典转换为描述列表
def至_线(说明):
所有描述=列表()
对于dict.keys中的键(说明):
[描述[键]中d的所有描述附加(d)]
返回所有描述
def create_标记器(描述):
行=到_行(描述)#装配标记器
标记器=标记器()
标记器。在文本(行)上匹配
返回标记器
def最大长度(说明):
行=到行(描述)
返回最大值(行中d的len(d.split())
def创建序列(标记器、最大长度、描述列表、照片、声音大小):
X1,X2,y=list(),list(),list()
对于描述列表中的描述:
#对序列进行编码
seq=标记器。文本到序列([desc])[0]
#将一个序列拆分为多个X,y对
对于范围(1,len(seq))中的i:
#分成输入和输出对
输入顺序,输出顺序=顺序[:i],顺序[i]
#焊盘输入序列
in_seq=pad_序列([in_seq],maxlen=None)[0]#删除了maxlen参数
#编码输出序列
out\u seq=to\u分类([out\u seq],num\u classes=vocab\u size)[0]
#贮藏
X1.追加(照片)
X2.追加(如下所示)
y、 附加(输出顺序)
返回数组(X1)、数组(X2)、数组(y)
def define_模型(声音大小、最大长度):
#特征提取模型
输入1=输入(形状=(4096,))
fe1=辍学(0.5)(输入1)
fe2=致密(256,活化='relu')(fe1)
#序列模型
输入2=输入(形状=(1,)#删除形状
se1=嵌入(语音大小256,掩码0=真)(输入2)
se2=辍学(0.5)(se1)
se3=LSTM(256)(se2)
#解码器模型
decoder1=添加([fe2,se3])
decoder2=density(256,activation='relu')(decoder1)
输出=密集(声音大小,激活='softmax')(解码2)
#把它绑在一起[图片,序号][文字]
模型=模型(输入=[inputs1,inputs2],输出=输出)
#编译模型
compile(loss='classifical\u crossentropy',optimizer='adam')
#总结模型
model.summary()
#取消对以下行的注释以停用/激活正在构造的图形==>
#plot_model(model,to_file='model.png',show_shapes=True)
回归模型
def数据生成器(描述、照片、标记器、最大长度、语音大小):
#循环永久覆盖图像
#此功能用于保存您的RAM,使其免受彻底破坏
而1:
对于键,descriptions.items()中的desc_列表:
#检索照片功能
照片=照片[键][0]
in_img、in_seq、out_word=创建序列(标记器、最大长度、描述列表、照片、声音大小)
收益率[[输入、输入、输出]
#下面是一些重要的东西:-----------
文件名='C:/Users/neelg/Documents/Atom_projects/Main/Flickr8k_text/Flickr_8k.trainImages.txt'
#确保用你自己的文件名替换文件名!!!
列车=装载集(文件名)
#打印('数据集:%d'%len(列))
train_descriptions=load_clean_descriptions('C:/Users/neelg/Documents/Atom_projects/Main/descriptions.txt',train)#clean descriptions的文件名
#打印('说明:序列=%d'%len(序列说明))
#照片特征
列车功能=加载照片功能('C:/Users/neelg/Documents/A
model.fit_generator(generator, epochs=1, steps_per_epoch=steps, verbose=1)
#This an Image Captioning Model developed by Neel Gupta :)
# IMPORTS GOES HERE -----------------
#import tensorflow as tf # Even tho we don't need it, It activates CUDA Functionality
from numpy import array
from pickle import load
from keras.preprocessing.text import Tokenizer
from keras.preprocessing.sequence import pad_sequences
from keras.utils import to_categorical
from keras.utils import plot_model
from keras.models import Model
from keras.layers import Input
from keras.layers import Dense
from keras.layers import LSTM
from keras.layers import Embedding
from keras.layers import Dropout
from keras.layers.merge import add
from keras.callbacks import ModelCheckpoint
from os import path

def load_doc(filename):
    file = open(filename, 'r')    #Opening the file.
    text = file.read()
    file.close()
    return text

def load_set(filename):
    doc = load_doc(filename) #Loading the document
    dataset = list()
    for line in doc.split('/n'):  #Weeding out the empty lines
        if len(line) < 1:
            continue
        identifier = line.split('.')[0]
        dataset.append(identifier)
    return set(dataset)

def load_clean_descriptions(filename, dataset):
    doc = load_doc(filename)
    descriptions = dict()
    for line in doc.split('\n'):
        # split line by white space
        tokens = line.split()
        # split id from description
        image_id, image_desc = tokens[0], tokens[1:]
        # skip images not in the set
        if image_id in dataset:
            # create list
            if image_id not in descriptions:
                descriptions[image_id] = list()
            # wrap description in tokens
            desc = '#Start# ' + ' '.join(image_desc) + ' #End#'
            descriptions[image_id].append(desc)
    return descriptions

def load_photo_features(filename, dataset):
    all_features = load(open(filename, 'rb'))
    features = {k: all_features[k] for k in dataset}
    return features

# convert a dictionary of clean descriptions to a list of descriptions
def to_lines(descriptions):
    all_desc = list()
    for key in dict.keys(descriptions):
        [all_desc.append(d) for d in descriptions[key]]
    return all_desc

def create_tokenizer(descriptions):
    lines = to_lines(descriptions)  #Fitting tokenizer
    tokenizer = Tokenizer()
    tokenizer.fit_on_texts(lines)
    return tokenizer

def max_length(descriptions):
    lines = to_lines(descriptions)
    return max(len(d.split()) for d in lines)

def create_sequences(tokenizer, max_length, desc_list, photo, vocab_size):
    X1, X2, y = list(), list(), list()
    for desc in desc_list:
        # encode the sequence
        seq = tokenizer.texts_to_sequences([desc])[0]
        # split one sequence into multiple X,y pairs
        for i in range(1, len(seq)):
            # split into input and output pair
            in_seq, out_seq = seq[:i], seq[i]
            # pad input sequence
            in_seq = pad_sequences([in_seq], maxlen=None)[0]  #Removed maxlen argument
            # encode output sequence
            out_seq = to_categorical([out_seq], num_classes=vocab_size)[0]
            # store
            X1.append(photo)
            X2.append(in_seq)
            y.append(out_seq)
    return array(X1), array(X2), array(y)

def define_model(vocab_size, max_length):
    # feature extractor model
    inputs1 = Input(shape=(4096,))
    fe1 = Dropout(0.5)(inputs1)
    fe2 = Dense(256, activation='relu')(fe1)
    # sequence model
    inputs2 = Input(shape=(1,))  #remove shape
    se1 = Embedding(vocab_size, 256, mask_zero=True)(inputs2)
    se2 = Dropout(0.5)(se1)
    se3 = LSTM(256)(se2)
    # decoder model
    decoder1 = add([fe2, se3])
    decoder2 = Dense(256, activation='relu')(decoder1)
    outputs = Dense(vocab_size, activation='softmax')(decoder2)
    # tie it together [image, seq] [word]
    model = Model(inputs=[inputs1, inputs2], outputs=outputs)
    # compile model
    model.compile(loss='categorical_crossentropy', optimizer='adam')
    # summarize model
    model.summary()
    #Uncomment the line below to deactivate/activate a graph being constructed==>
    #plot_model(model, to_file='model.png', show_shapes=True)
    return model

def data_generator(descriptions, photos, tokenizer, max_length, vocab_size):
    # loop for ever over images
    #This function is for saving ur RAM from utter destruction
    while 1:
        for key, desc_list in descriptions.items():
            # retrieve the photo feature
            photo = photos[key][0]
            in_img, in_seq, out_word = create_sequences(tokenizer, max_length, desc_list, photo, vocab_size)
            yield [[in_img, in_seq], out_word]

# HERE GOESETH THE IMPORTANT STUFF:-----------
filename = 'C:/Users/neelg/Documents/Atom_projects/Main/Flickr8k_text/Flickr_8k.trainImages.txt'
# Be sure to replace the file-name with ur own!!!
train = load_set(filename)
#print('Dataset:%d' % len (train))

train_descriptions = load_clean_descriptions('C:/Users/neelg/Documents/Atom_projects/Main/descriptions.txt', train)  #File name of clean descriptions
#print('Descriptions: train=%d'  %  len(train_descriptions))

#photo features
train_features = load_photo_features('C:/Users/neelg/Documents/Atom_projects/Main/features.pkl', train)
#print('Photos: train=%d' % len(train_features))
print("Loaded photo features!")
#Setting up the Tokenizer--
tokenizer = create_tokenizer(train_descriptions)
vocab_size = len(tokenizer.word_index) + 1
#print('Vocabulary Size: %d' % vocab_size)
print('\n', "Created tokenizers")
#max_length = max_length(descriptions)  #Getting the max_length

#THE MODEL
model = define_model(vocab_size, max_length)
print('\n', "model ready for some action!")
# train the model, run epochs manually and save after each epoch
epochs = 20
steps = len(train_descriptions)
# test the data generator
print("Giving the Data generator a workout :)")
generator = data_generator(train_descriptions, train_features, tokenizer, max_length, vocab_size)
inputs, outputs = next(generator)
print(inputs[0].shape)
print(inputs[1].shape)
print(outputs.shape)

for i in range(epochs):
    generator = data_generator(train_descriptions, train_features, tokenizer, max_length, vocab_size)
    model.fit_generator(generator, epochs=1, steps_per_epoch=steps, verbose=1)
    print('Starting the training.....')
    # save model
    model.save('model_' + str(i) + '.h5')