【问题标题】:Keras Dense layer after an LSTM with return_sequence=True具有 return_sequence=True 的 LSTM 之后的 Keras Dense 层
【发布时间】:2019-03-19 02:24:24
【问题描述】:

我正在尝试在 Keras 中重新实现这篇论文 1,因为作者使用了 PyTorch 2。这是网络架构: 到目前为止我所做的是:

number_of_output_classes = 1
hidden_size = 100
direc = 2
lstm_layer=Bidirectional(LSTM(hidden_size, dropout=0.2, return_sequences=True))(combined) #shape after this step (None, 200) 
#weighted sum and attention should be here
attention = Dense(hidden_size*direc, activation='linear')(lstm_layer) #failed trial
drop_out_layer = Dropout(0.2)(attention)    
output_layer=Dense(1,activation='sigmoid')(drop_out_layer) #shape after this step (None, 1)

我想在 LSTM 之后包含注意力层和最终的 FF 层,但由于尺寸和 return_sequence=True 选项,我遇到了错误。

【问题讨论】:

  • 任何可以共享代码的 github 存储库

标签: python keras deep-learning nlp


【解决方案1】:

这是一个序列分类任务。序列分类是多对一映射,您可以在其中将多个时间步长的输入标记为单个类。在这种情况下,输入的形状应为 (batch_size, time_steps, channels),输出的形状应为 (batch_size, channels)。如果 LSTM 类的 return_sequences 参数为 True,则输出的形状为 (batch_size, time_steps, channels)。将其馈送到密集层和丢失层不会减少维数。要将维度数减少为两个,您必须将最后一个 LSTM 层的return_sequences 参数设置为True。你的情况

lstm_layer=Bidirectional(LSTM(hidden_size, dropout=0.2, return_sequences=False))(combined)

【讨论】:

  • 感谢 Mitiku 的回复。但正如我从图中了解到的那样,输出也是一个序列。然后结合起来,对吧?
  • 并非如此。在论文中,图 2 是句子标签,即序列到标签的映射,输出不是序列,而是一个单词。对于序列到序列的映射,请查看您提到的论文的图 1。
猜你喜欢
  • 2019-01-15
  • 2022-06-10
  • 1970-01-01
  • 2018-05-26
  • 2018-06-16
  • 1970-01-01
  • 1970-01-01
  • 2019-08-21
  • 2022-01-24
相关资源
最近更新 更多