稠密?还是时间分布密集?在 Keras 的 LSTM 层之后

数据挖掘 喀拉斯 lstm
2022-02-22 18:15:58

Dense和TimeDistributedDense,哪一个适合Keras中LSTM层之后?

例如,

input = Input(shape=(12,N_indepen), dtype='float32', name='inci_input')
lstm = Bidirectional(LSTM(100, activation='elu',return_sequences=False))(input)

# Dense? or TimeDistributedDense?
dense = layers.Dense(30, activation='elu')(lstm)
dense = layers.TimeDistributedDense(30, activation='elu')(lstm)

m_y = layers.Dense(1, activation='linear')(dense)

我读了一些文章,其中大部分使用了 Dense,但也有一些使用了 TimeDistributedDense。我希望知道理论上什么是正确的。

2个回答

使用 TimeDistributed 时,您需要有一个时间序列,以便您可以将相同的层(在本例中为 Dense)应用于每个时间片。在您的代码中,您有 return_sequences=False 不会产生序列,因此您需要应用 Dense。

假设您打算设置 return_sequences=True,那么 Dense 和 TimeDistributedDense 在这种情况下执行相同的任务。

一个密集层将输出一个固定大小的向量。这将是您想要的分类任务,例如情感分类。

TimeDistributedDense 将对序列的每个输出应用一个密集层。因此,假设您有一个文本输入,表示为一系列词嵌入,您将应用一个 LSTM 单元,然后将相同的密集层应用于 LSTM 的每个步骤输出。例如,这将用于词性标记,在这种情况下,您有兴趣用标记标记顺序输入的每个单词。