ValueError: Input 0 is incompatible with layer layer_1: expected ndim=3, found ndim=2
ValueError: Input 0 is incompatible with layer layer_1: expected ndim=3, found ndim=2
我正在尝试使用词嵌入和编码器-解码器架构构建文本摘要器。这是我第一次使用 Keras,我无法理解为什么 layer_1
需要 ndim=3
。我无法弄清楚这一点。下面是我的代码:
vocab_size = 16828
n_embeddings = 200
def model_builder(embeds):
model = keras.Sequential()
model.add(Embedding(weights=[embeds], name="embedding_1", input_dim=vocab_size,
output_dim=n_embeddings))
for i in range(3):
lstm = LSTM(rnn_size, name="layer_%s" %(i))
model.add(lstm)
model.add(Dropout(prob, name="drop_%s" %(i)))
model.add(Dense())
model.add(Activation('softmax', name="activation"))
return model
rnn_size = 200
prob = 0.5
encoder = model_builder(embedding)
encoder.compile(loss='categorical_crossentropy', optimizer='rmsprop')
enocder.save_weights('embeddings.pkl', overwrite=True)
非常感谢您的帮助。让我知道你们是否需要任何其他信息。提前谢谢你。
P.S。 Keras
后端是 Tensorflow
.
你的问题出在这几行:
for i in range(3):
lstm = LSTM(rnn_size, name="layer_%s" %(i))
model.add(lstm)
model.add(Dropout(prob, name="drop_%s" %(i)))
LSTM
默认情况下 returns 仅是其预测的最后一步 - 因此数据正在失去其顺序性质。在您的示例中 - 在第一次迭代后 LSTM
输出一个向量而不是一系列错误 - 这就是引发错误的原因。
为了解决这个问题,请尝试:
for i in range(2):
lstm = LSTM(rnn_size, name="layer_%s" %(i), return_sequences=True)
model.add(lstm)
model.add(Dropout(prob, name="drop_%s" %(i)))
lstm = LSTM(rnn_size, name="layer_%s" %(i), return_sequences=False)
model.add(lstm)
我注意到的另一件事是您使用 Dense
的方式不正确。您应该提供输出神经元的数量:
model.add(Dense(nb_of_output_neurons))
干杯。
我正在尝试使用词嵌入和编码器-解码器架构构建文本摘要器。这是我第一次使用 Keras,我无法理解为什么 layer_1
需要 ndim=3
。我无法弄清楚这一点。下面是我的代码:
vocab_size = 16828
n_embeddings = 200
def model_builder(embeds):
model = keras.Sequential()
model.add(Embedding(weights=[embeds], name="embedding_1", input_dim=vocab_size,
output_dim=n_embeddings))
for i in range(3):
lstm = LSTM(rnn_size, name="layer_%s" %(i))
model.add(lstm)
model.add(Dropout(prob, name="drop_%s" %(i)))
model.add(Dense())
model.add(Activation('softmax', name="activation"))
return model
rnn_size = 200
prob = 0.5
encoder = model_builder(embedding)
encoder.compile(loss='categorical_crossentropy', optimizer='rmsprop')
enocder.save_weights('embeddings.pkl', overwrite=True)
非常感谢您的帮助。让我知道你们是否需要任何其他信息。提前谢谢你。
P.S。 Keras
后端是 Tensorflow
.
你的问题出在这几行:
for i in range(3):
lstm = LSTM(rnn_size, name="layer_%s" %(i))
model.add(lstm)
model.add(Dropout(prob, name="drop_%s" %(i)))
LSTM
默认情况下 returns 仅是其预测的最后一步 - 因此数据正在失去其顺序性质。在您的示例中 - 在第一次迭代后 LSTM
输出一个向量而不是一系列错误 - 这就是引发错误的原因。
为了解决这个问题,请尝试:
for i in range(2):
lstm = LSTM(rnn_size, name="layer_%s" %(i), return_sequences=True)
model.add(lstm)
model.add(Dropout(prob, name="drop_%s" %(i)))
lstm = LSTM(rnn_size, name="layer_%s" %(i), return_sequences=False)
model.add(lstm)
我注意到的另一件事是您使用 Dense
的方式不正确。您应该提供输出神经元的数量:
model.add(Dense(nb_of_output_neurons))
干杯。