【发布时间】:2018-11-26 00:34:13
【问题描述】:
我正在尝试使用keras functional api 构建多输入多输出模型,并且我正在关注他们的代码 但我得到了那个错误:
ValueError:输入 0 与层 lstm_54 不兼容:预期 ndim=3,发现 ndim=4
我在创建 lstm_out 层时遇到了这个错误,代码如下:
def build_model(self):
main_input = Input(shape=(self.seq_len, 1), name='main_input')
#seq_len = 50, vocab_len = 1000
x = Embedding(output_dim=512, input_dim=self.vocab_len()+1, input_length=self.seq_len)(main_input)
# A LSTM will transform the vector sequence into a single vector,
# containing information about the entire sequence
lstm_out = LSTM(50)(x)
self.auxiliary_output = Dense(1, activation='sigmoid', name='aux_output')(lstm_out)
auxiliary_input = Input(shape=(self.seq_len,1), name='aux_input')
x = concatenate([lstm_out, auxiliary_input])
# We stack a deep densely-connected network on top
x = Dense(64, activation='relu')(x)
x = Dense(64, activation='relu')(x)
x = Dense(64, activation='relu')(x)
# And finally we add the main logistic regression layer
main_output = Dense(1, activation='sigmoid', name='main_output')(x)
self.model = Model(inputs=[main_input, auxiliary_input], outputs=[main_output, auxiliary_output])
print(self.model.summary())
self.model.compile(optimizer='rmsprop', loss='binary_crossentropy',
loss_weights=[1., 0.2])
我认为问题在于嵌入层中的 input_dim,但我在keras Embedding documentation 中读到(input_dim 应该等于词汇量 + 1)。
我不知道为什么会这样,我的 input_dim 中的确切错误是什么,以及如何解决?
【问题讨论】:
标签: python machine-learning keras neural-network lstm