2017-09-08 53 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

我仔细检查了一切,你看起来是对的。谢谢。 –