我正在研究我希望在keras中成为一个简单的nmt翻译器。下面是keras中seq2seq的一些鼓舞人心的例子的链接。
https://machinelearningmastery.com/develop-encoder-decoder-model-sequence-sequence-prediction-keras/
我想要一个模型,它将300的向量作为单词输入,一次取出25个。这25个数字是一个句子的长度。单位是300号,tokens_per_sentence是25号。以下代码仅包含培训模型。我已经省略了推理模型。我的模型编译,但当我用训练数据运行它时,我得到一个尺寸错误。我已经尝试重塑了dense_layer_b的输出,但我反复告诉我,操作的输出需要与输入的大小相同。我使用python3和tensorflow作为后端。我的keras是v2.1.4。我的o.s.是uubuntu。
错误消息:
ValueError: Error when checking target: expected dense_layer_b to have 2 dimensions, but got array with shape (1, 25, 300)
一些终端输出:
Tensor("lstm_1/while/Exit_2:0", shape=(?, 25), dtype=float32)
(?, 25) (?, 25) h c
一些代码:
def model_lstm():
x_shape = (None,units)
valid_word_a = Input(shape=x_shape)
valid_word_b = Input(shape=x_shape)
### encoder for training ###
lstm_a = LSTM(units=tokens_per_sentence, return_state=True)
recurrent_a, lstm_a_h, lstm_a_c = lstm_a(valid_word_a)
lstm_a_states = [lstm_a_h , lstm_a_c]
print(lstm_a_h)
### decoder for training ###
lstm_b = LSTM(units=tokens_per_sentence ,return_state=True)
recurrent_b, inner_lstmb_h, inner_lstmb_c = lstm_b(valid_word_b, initial_state=lstm_a_states)
print(inner_lstmb_h.shape, inner_lstmb_c.shape,'h c')
dense_b = Dense(tokens_per_sentence , activation='softmax', name='dense_layer_b')
decoder_b = dense_b(recurrent_b)
model = Model([valid_word_a,valid_word_b], decoder_b)
return model
我希望当代码实际上与数据一起使用时,终端输出中的问号可以用我的矢量大小替换。
编辑:我一直试图通过切换代码中的维度来解决这个问题。我已更新代码和错误消息。我仍然有基本相同的问题。 Dense图层似乎不起作用。
所以我想我需要为return_sequences
和True
设置lstm_a
到lstm_b
。