Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/300.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 Keras-学习情绪数据后的模型预测抛出错误_Python_Machine Learning_Tensorflow_Keras - Fatal编程技术网

Python Keras-学习情绪数据后的模型预测抛出错误

Python Keras-学习情绪数据后的模型预测抛出错误,python,machine-learning,tensorflow,keras,Python,Machine Learning,Tensorflow,Keras,我的问题是使用tensorflow后端通过keras中的预测方法获得结果。但首先是一个小的介绍 我正在使用 Python 2.7.12 Keras==1.2.1 numpy==1.12.0 tensorflow==0.12.1 我创建了一个卷积神经网络,如以下文档所示: 我用11842条准备好的推特文本训练网络。唯一的个体变化是我有3种可能的结果(0,1,2)。我在以下代码行中定义: preds = Dense(3, activation='softmax')(x) 因此,该方法适合工作没

我的问题是使用tensorflow后端通过keras中的预测方法获得结果。但首先是一个小的介绍

我正在使用

  • Python 2.7.12
  • Keras==1.2.1
  • numpy==1.12.0
  • tensorflow==0.12.1
我创建了一个卷积神经网络,如以下文档所示:

我用11842条准备好的推特文本训练网络。唯一的个体变化是我有3种可能的结果(0,1,2)。我在以下代码行中定义:

preds = Dense(3, activation='softmax')(x)
因此,该方法适合工作没有问题,我实现了88-92%的acc

model_fit = model.fit(x_train, y_train, validation_data=(x_val, y_val), nb_epoch=10, batch_size=128)
学习过程结束后,我将模型保存为.h5格式(也可以正常工作)

现在我尝试加载模型并用它们进行预测。第一个例子(训练的_模型)是通过我用来训练的相同数据完成的。。。因为我想比较一下。第二个例子(训练有素的_模型_2)是通过新的twitter文本(我之前收集的)完成的

要将培训数据集与“实时/新”数据集进行比较:

print data_train.shape#(118421000)

print data_predict.shape#(46962,1000)

另外,这两种类型都来自type
dtype=int32

以下代码行引发第一个错误:

prediction_result_2 = trained_model_2.predict(data_predict, batch_size=128)
tensorflow.python.framework.errors\u impl.InvalidArgumentError:index[0999]=13608不在[013480]中 [[Node:Gather\u 1=Gather[Tindices=DT\u INT32,Tparams=DT\u FLOAT,validate\u index=true,\u device=“/job:localhost/replica:0/task:0/cpu:0”](嵌入\u 1\u 1/read,\u recv\u input\u 1\u 0)]]

以下代码行引发第二个错误:

trained_model_2 = load_model("trained_model.h5")
InvalidArgumentError(回溯见上文):索引[0999]=13608不在[013480]中 [[Node:Gather\u 1=Gather[Tindices=DT\u INT32,Tparams=DT\u FLOAT,validate\u index=true,\u device=“/job:localhost/replica:0/task:0/cpu:0”](嵌入\u 1\u 1/read,\u recv\u input\u 1\u 0)]]

编辑 我创建的方法的源代码。方法“trainModule”仅用于训练网络/保存它。方法“predict\u Mootation”用于我的预测测试。第一个预测结果有效并返回一个numpy数组,其形状如下(11842,3)

整个错误输出:


如果需要一些附加信息,我将更新问题…

可能它试图访问索引为13608的[013480]列表(显然不起作用)。其他人也有类似问题:
他似乎试图访问索引为10535的词汇表[0,10000)。

问题是经过训练的模型在嵌入矩阵中找不到单词。这意味着我使用了不同的词汇表进行训练和预测。由于固定词汇表的原因,我需要相同的词汇表用于训练和新数据

通常,我只需从以下位置修复标记器:

tokenizer_predict = Tokenizer(nb_words=MAX_NB_WORDS)
tokenizer_predict.fit_on_texts(texts_predict)
sequence_predict = tokenizer_predict.texts_to_sequences(predict_data)
致:


为了学习模型,你做了什么样的转换来从数据火车中得到x火车,x瓦尔?就像上面的链接一样。我洗牌所有文本,然后用“验证分割”(对我来说是0.19)将它们相乘。在它们之后,我将它们在训练和验证数据之间分割。或者你的意思是,我如何将它们得到一个numpy数组?使用print(len(data火车)),print(type(data_train))我得到以下输出11842,…用于火车数据集的预测。我得到了与实时twitter数据集相同的输出…只是长度更高46962,…因此它应该是一个nparray
tokenizer_predict = Tokenizer(nb_words=MAX_NB_WORDS)
tokenizer_predict.fit_on_texts(texts_predict)
sequence_predict = tokenizer_predict.texts_to_sequences(predict_data)
tokenizer_predict = Tokenizer(nb_words=MAX_NB_WORDS)
tokenizer_predict.fit_on_texts(texts_train)
sequence_predict = tokenizer_predict.texts_to_sequences(predict_data)