我一直无法弄清楚RNN编码器-解码器体系结构的尺寸。我了解LSTM的工作原理,但是我正在努力在Keras中实现这一目标。在查看了文档并阅读了问答之后,网络输出的尺寸看起来必须与整个目标集的尺寸匹配(而不是特定的目标,这没有意义)。我敢肯定,我读错了,它需要适合给定xi的目标尺寸(暂时搁置批次问题)。经过几个小时的摆弄,我更加困惑。我认为我将输入嵌入RNN而不是将输出嵌入的事实可能与它有关,并且我可能需要在此过程中将网络扁平化。
这是设置:
代码如下:
model = Sequential()
model.add(Embedding(vocabulary_size, embed_size, input_length = maxlen, weights=[embedding_matrix]))
model.add(Bidirectional(LSTM(embed_size, return_sequences=True)))
model.add(LSTM(embed_size, return_sequences=True))
if dropout < 1.0:
model.add(Dropout(dropout))
model.add(TimeDistributed(Dense(embed_size, activation='softmax')))
# model.add(Activation('softmax'))
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
print(model.summary())
model.fit(X_itrain, y_train, batch_size=32, epochs=1)
以下是网络摘要:
Layer (type) Output Shape Param #
embedding_29 (Embedding) (None, 95, 100) 404600
bidirectional_12 (Bidirectio (None, 95, 200) 160800
lstm_45 (LSTM) (None, 95, 100) 120400
time_distributed_18 (TimeDis (None, 95, 100) 10100
Total params: 695,900 Trainable params: 695,900 Non-trainable params:
这是错误:
ValueError: Error when checking target: expected time_distributed_18 to have 3 dimensions, but got array with shape (1440, 95)
其他详细信息:
答案 0 :(得分:0)
您遇到的一个问题是您当前未在构建编码器-解码器模型。当前,您尝试训练一个模型,该模型会得到一个问题,然后立即回答。对于编码器-解码器模型,您将需要构建两个模型。 第一模型必须将输入映射到编码状态。然后,第二个模型应该学习采用这种编码状态,获得已经回答的部分,并给您下一个单词。
您可以找到example Keras code here。