Python Keras函数api给出错误“1”;预期ndim=3,发现ndim=4“;
我正在尝试使用构建一个多输入多输出模型,并遵循他们的代码 但我犯了一个错误: ValueError:输入0与层lstm_54不兼容:应为 ndim=3,发现ndim=4 我在创建lstm_out层时出错,代码如下:Python Keras函数api给出错误“1”;预期ndim=3,发现ndim=4“;,python,machine-learning,keras,neural-network,lstm,Python,Machine Learning,Keras,Neural Network,Lstm,我正在尝试使用构建一个多输入多输出模型,并遵循他们的代码 但我犯了一个错误: 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 = Embeddin
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,但我在文章中读到了这一点(input_dim应该等于词汇表的大小+1)
我不知道为什么会这样,我的输入尺寸中的确切错误是什么,以及如何解决它?嵌入的输入形状应该是一个带有形状的2D张量:(批量大小,序列长度)。在您的代码片段中,提供了主输入,它是一个3D张量。要修复它,请更改以下行:
main_input = Input(shape=(self.seq_len, 1), name='main_input')
<...>
auxiliary_input = Input(shape=(self.seq_len,1), name='aux_input')
main\u input=input(shape=(self.seq\u len,1),name='main\u input')
辅助输入=输入(shape=(self.seq\u len,1),name='aux\u input')
致:
main\u input=input(shape=(self.seq\u len,),name='main\u input')
辅助输入=输入(shape=(self.seq\u len,),name='aux\u input')
它应该以不同的维度来解决这个问题
main_input = Input(shape=(self.seq_len, ), name='main_input')
<...>
auxiliary_input = Input(shape=(self.seq_len, ), name='aux_input')