Keras RNN编码器 - 解码器架构输出的尺寸

问题描述 投票:0回答:1

我一直无法弄清楚RNN编码器 - 解码器架构的尺寸。我理解LSTM是如何工作的,但我很难在Keras中实现这个。查看文档并阅读Q&A后,看起来网络输出的维度必须与整个目标集的维度相匹配(而不是特定目标 - 这没有任何意义)。我确信我已经读错了,而是需要适应给定xi的目标维度(暂时不考虑批量问题)。经过几个小时的摆弄,我更加困惑。我认为我将输入嵌入到RNN而不是嵌入输出这一事实可能与它有关,我可能需要在整个过程中的某个地方展平网络。

这是设置:

  • 数据集是大量的Q&A对。我正在使用1440对样本来构建基础设施。 xi:“美国的首都是什么?” 易:“我认为首都是华盛顿”
  • 在NLP之后,有两个numpy数组 - 一个用于X,一个用于Y.每行对应于原始数据集中的一行,例如: 已处理的xi:[253,8,25,208,28,1] 已处理的yi:[827,10,25,208,8,198]
  • 输入序列有一个嵌入层(使用手套算法),但我不认为输出序列是必要的。

这是代码:

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)

其他详情:

  • maxlen:输入和输出序列的最大长度为95
  • embed_size:嵌入一词的维数为100
  • vocabulary_size:词汇量的大小是4046
python-3.x recurrent-neural-network keras-layer seq2seq encoder-decoder
1个回答
0
投票

您遇到的一个问题是您目前没有构建编码器 - 解码器模型。目前,您尝试训练模型,获得问题而不是立即回答它。对于编码器解码器模型,您需要构建两个模型。第一个模型必须将输入映射到编码状态。然后第二个模型应该学会采用这种编码状态,得到已经回答的部分并给你回到下一个单词。

你可以找到example Keras code here

© www.soinside.com 2019 - 2024. All rights reserved.