【问题标题】:Dimensions for Keras RNN encoder-decoder architecture outputKeras RNN 编码器-解码器架构输出的维度
【发布时间】:2019-07-21 21:00:21
【问题描述】:

我一直无法确定 RNN 编码器-解码器架构的尺寸。我了解 LSTM 的工作原理,但我正在努力在 Keras 中实现这个。在查看文档并阅读问答后,看起来网络输出的维度必须与整个目标集的维度相匹配(而不是特定目标——这没有意义)。我确定我读错了,它需要仅适合给定 xi 的目标尺寸(暂时搁置批次问题)。经过几个小时的摆弄,我更加困惑。我认为我将输入嵌入到 RNN 而没有嵌入输出这一事实可能与此有关,并且我可能需要在此过程中将网络展平。

设置如下:

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

代码如下:

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】:

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

    您可以找到example Keras code here。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-14
      • 1970-01-01
      • 1970-01-01
      • 2018-11-21
      • 2021-08-05
      相关资源
      最近更新 更多