【发布时间】:2017-02-18 08:45:35
【问题描述】:
我的问题是通过使用 tensorflow 后端的 keras 中的预测方法获得结果。但首先是一个简短的介绍。
我正在使用
- Python 2.7.12
- Keras==1.2.1
- numpy==1.12.0
- 张量流==0.12.1
我在这些文档中创建了一个卷积神经网络:https://blog.keras.io/using-pre-trained-word-embeddings-in-a-keras-model.html
我用 11842 条准备好的推特文本训练了网络。唯一的个人变化是我有 3 种可能的结果(0,1,2)。我在以下代码行中定义了这一点:
preds = Dense(3, activation='softmax')(x)
所以方法 fit 没有问题,我的准确率在 88-92% 之间。
model_fit = model.fit(x_train, y_train, validation_data=(x_val, y_val), nb_epoch=10, batch_size=128)
在学习过程之后,我将模型保存为 .h5 格式(也可以正常工作)。
现在我尝试加载模型并使用它们进行预测。第一个示例(trained_model)是通过我用来训练的相同数据完成的......因为我想比较它们。第二个示例(trained_model_2)是通过新的 twitter 文本(我之前收集的)完成的。
trained_model = load_model("trained_model.h5")
prediction_result = trained_model.predict(data_train, batch_size=128)
print prediction_result.shape ### Prints: (11842, 3)
trained_model_2 = load_model("trained_model.h5")
prediction_result_2 = trained_model_2.predict(data_predict, batch_size=128)
用于将训练数据集与“实时/新”数据集进行比较:
print data_train.shape # (11842, 1000)
print data_predict.shape # (46962, 1000)
两者都来自dtype=int32类型
以下代码行引发第一个错误:
prediction_result_2 = trained_model_2.predict(data_predict, batch_size=128)
tensorflow.python.framework.errors_impl.InvalidArgumentError: indices[0,999] = 13608 不在 [0, 13480) [[节点:Gather_1 = Gather[Tindices=DT_INT32, Tparams=DT_FLOAT, validate_indices=true, _device="/job:localhost/replica:0/task:0/cpu:0"](embedding_1_W_1/read, _recv_input_1_1_0)]]
以下代码行引发第二个错误:
trained_model_2 = load_model("trained_model.h5")
InvalidArgumentError(参见上文的回溯):indices[0,999] = 13608 is not in [0, 13480) [[节点:Gather_1 = Gather[Tindices=DT_INT32, Tparams=DT_FLOAT, validate_indices=true, _device="/job:localhost/replica:0/task:0/cpu:0"](embedding_1_W_1/read, _recv_input_1_1_0)]]
编辑 我创建的方法的源代码。方法“trainModule”仅用于训练网络/保存它。 “predict_sentiment”方法用于我的预测测试。第一个 prediction_results 工作并返回一个具有以下形状的 numpy 数组 (11842, 3) Code - pastbin
整个错误输出:Error output - pastbin
如果需要一些额外的信息,我会更新问题...
【问题讨论】:
-
你做了什么样的转换从data_train得到x_train、x_val?
-
学习模型?我在上面的链接中这样做了。我将所有文本打乱,然后将它们与“VALIDATION_SPLIT”(对我来说是 0.19)相乘,然后在训练和验证数据之间拆分它们。或者你的意思是我如何让它们成为一个 numpy 数组?
标签: python machine-learning tensorflow keras