【问题标题】:More input and one output issue in KerasKeras 中的更多输入和一个输出问题
【发布时间】:2019-03-15 11:30:34
【问题描述】:
self.embed = Sequential([Embedding(9488, output_dim=512,input_length=14),
                                Activation('relu'),
                                    Dropout(0.5)], name='embed.0')

self.fc_embed = Sequential([Dense(512, input_shape=(10,2048)),
                                    Activation('relu'),
                                    Dropout(0.5)], name='fc_embed.0')

inputs_bedding = Input(shape=(10,))
xt = self.embed(inputs_bedding)

input_feats = Input(shape=(10,2048))
fc_feats = self.fc_embed(input_feats)

fc_feats_new = K.reshape(fc_feats, [fc_feats.shape[1], fc_feats.shape[2]])
xt_new = K.reshape(xt, [xt.shape[1], xt.shape[2]])

 prev_h = state[0][-1] (shape is (10,512))
 att_lstm_input = Concatenate([prev_h, fc_feats_new, xt_new], axis=1)
 lstm, h_att, c_att = LSTM(units=512, name='core.att_lstm', return_state=True)(att_lstm_input)
 model = Model([input_feats, inputs_att, inputs_bedding], lstm)
 model.summary()

这是我得到的错误:

File "copy_eval.py", line 165, in <module>
model1 = TopDownModel.forward(fc_feats, att_feats, seq, att_masks)

文件“/home/ubuntu/misc/customize_keras.py”,第 127 行,向前 lstm, h_att, c_att = LSTM(units=512, name='core.att_lstm', return_state=True)(att_lstm_input) 调用中的文件“/usr/local/lib/python2.7/dist-packages/keras/layers/recurrent.py”,第 500 行 return super(RNN, self).call(inputs, **kwargs) 调用中的文件“/usr/local/lib/python2.7/dist-packages/keras/engine/topology.py”,第 575 行 self.assert_input_compatibility(输入) 文件“/usr/local/lib/python2.7/dist-packages/keras/engine/topology.py”,第 448 行,在 assert_input_compatibility str(输入)+'。层的所有输入 ' ValueError:使用不是符号张量的输入调用层 core.att_lstm。接收类型:.完整输入:[]。该层的所有输入都应该是张量。

如果需要更多输入,如何将它们合并为一个输出?

【问题讨论】:

  • 请包含完整的回溯错误,因为它指出了产生错误的行。
  • 谢谢你,马蒂亚斯。更新了完整的错误。
  • 使用层Concatenate代替后端操作concatenate,或者将concatenate包裹在Lambda layer中。
  • 谢谢你,rvinas。我想做的是将它作为 LSTM 的输入。刚刚更新了错误。如果可能,请提供帮助。

标签: python merge keras keras-layer


【解决方案1】:

Concatenate 应该用作一个层,像这样:

att_lstm_input = Concatenate(axis=1)([prev_h, fc_feats_new, xt_new])

【讨论】:

  • 谢谢你,马蒂亚斯。在我尝试将它放入lstm之后,self.att_lstm(att_lstm_input),又出现了一个错误,ValueError: Input 0 is incompatible with layer core.att_lstm: expected ndim=3, found ndim=2。
  • @user10282036 这是一个不同的问题,意味着您没有提供正确的输入来训练网络。
  • 谢谢你,马蒂亚斯。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-08-20
  • 2020-10-27
  • 2019-02-25
  • 1970-01-01
  • 1970-01-01
  • 2021-02-24
  • 2019-03-06
相关资源
最近更新 更多