2017-09-08 57 views
0
傳遞validation_data到模型與幾個輸入

我有一個模型有兩個輸入和一個輸出:不能在Keras

... 
model = models.Model([l_in_wv, l_in_ng], [l_out]) 
model.compile(optimizer="Adam", loss=loss_fn, metrics=[...], sample_weight_mode="temporal") 
model.fit([tokens_wv_j, tokens_ng_j], anno_onehot, validation_split=0.2 verbose=1, epochs=20, batch_size=400, sample_weight=sample_weights, callbacks=[checkpoint]) 

它,只要我不試圖通過細列車一個單獨的數據集,如validation_data,例如

model.fit([tokens_wv_j, tokens_ng_j], anno_onehot, validation_data=[[tokens_wv_j_val, tokens_ng_j_val], anno_j_val], verbose=1, epochs=20, batch_size=400, sample_weight=sample_weights, callbacks=[checkpoint]) 

如果我嘗試這樣做,模型立刻引發此錯誤

ValueError: Error when checking target: expected l_out to have 3 dimensions, but got array with shape (131943, 50) 

我試圖改變我的數據集傳遞給([tokens_wv_j_val, tokens_ng_j_val], anno_j_val)((tokens_wv_j_val, tokens_ng_j_val), anno_j_val)甚至(tokens_wv_j_val, tokens_ng_j_val, anno_j_val)(順便這顯然是錯誤,因爲在這種情況下第三個數組被認爲是sample_weights),但所有選項只會導致稍微不同的錯誤消息。此功能是否受支持?關於多輸入模型的文檔沒有提供任何關於它的信息。

回答

1

嘛....如果培訓工作,你只需要確保這些形狀相匹配,除了拳頭大小(批量):

  • tokens_wv_j.shape[1:] = tokens_wv_j_val.shape[1:]
  • tokens_ng_j.shape[1:] = tokens_ng_j_val.shape[1:]
  • anno_onehot.shape[1:] = anno_j_val.shape[1:]
+0

我不認爲這真的解決了這個問題,因爲所有的陣列具有相同的形狀(第一維除外)。 –

+0

相信錯誤信息,它不會說謊。如果他們都具有相同的形狀,那麼你不能訓練。錯誤消息對於'anno_onehot'或'anno_j_val'都是明確的。它們都應該被塑造成'(BatchSize,3)'。 ---現在,如果你確實需要它們是'(BatchSize,50)',那麼你必須修改你的模型(如果是這樣的話,我們應該看看它的代碼)。 –

+0

我仔細檢查了一切,你看起來是對的。謝謝。 –