首页 > 解决方案 > 具有 return_sequence=True 的 LSTM 之后的 Keras Dense 层

问题描述

我正在尝试在 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 选项而遇到错误。

标签: pythonkerasdeep-learningnlp

解决方案


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

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


推荐阅读