我的問題是通過使用tensorflow後端的keras中的預測方法來獲得結果。但首先是一個小介紹。Keras - 學習情感數據後預測模型引發錯誤
我使用
- 的Python 2.7.12
- Keras == 1.2.1
- numpy的== 1.12.0
- tensorflow == 0.12.1
我在這些文檔中創建了卷積神經網絡:https://blog.keras.io/using-pre-trained-word-embeddings-in-a-keras-model.html
我用11842準備的twitter文本訓練了網絡。唯一的變化就是我有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格式(也正常工作)。
現在我嘗試加載模型並預測它們。第一個例子(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 is not in [0, 13480) [[Node: 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 (see above for traceback): indices[0,999] = 13608 is not in [0, 13480) [[Node: 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
如果需要一些額外的信息,我會更新的問題...
你做了什麼樣的轉變得到x_train,從data_train x_val? – rAyyy
用於學習模型?我在上面的鏈接中做了它。我將所有的文本進行混洗,並將它們與「VALIDATION_SPLIT」(對我來說是0.19)相乘,然後將它們在訓練數據和驗證數據之間分開。或者你的意思是我怎麼讓他們到一個數組? – HauLuk