带辍学的LSTM的Keras和Tensorflow实现之间的区别

时间:2018-08-13 14:08:09

标签: tensorflow keras lstm

我正在审查tensorflow和Keras中LSTM单元的文档。特别是,我也想申请辍学。这是我在Keras中拥有的,想在张量流中应用相同的LSTM单元:

cell = LSTM(num_units_2, return_sequences=True, dropout=dropout, recurrent_dropout=dropout)(net)

因此,我知道我需要在tf.nn.rnn_cell.LSTMCell的张量流中使用num_units = num_units_2。其次,我需要一个DropoutWrapper

cell = tf.nn.rnn_cell.DropoutWrapper(cell)

现在,我想应用与Keras代码类似的dropoutrecurrent_dropout。因此,我发现tensorflow的dropout实现将在每个时间步上应用不同的dropout掩码,除非将variational_recurrent设置为True(但我不确定variantal_recurrent的工作原理)。

此外,我不确定Keras中的LSTM是否在每个时间步上都应用了不同的Mask。

第二,我对output_keep_probstate_keep_prob之间的区别感到困惑,都提到:

output_keep_prob :单位张量或浮点数介于0和1之间,输出保持概率;如果它是常数且为1,则不会添加任何输出压降...

非常感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

什么是变异辍学

据我所知,变异辍学的主要新颖之处在于,所有展开的步骤都使用了相同的辍学掩码(如您所说)。

output_keep_probstate_keep_prob之间的差异

output_keep_prob是应用于LSTM单元的输出(h)的丢失率,其中state_keep_prob是应用于LSTM状态的单元(c)的丢失率。

Keras的降落选择

看看Keras的LSTM source codeits use for the LSTMCell中的_generate_dropout_mask方法,我认为Keras LSTM仅将可变递归丢弃用于循环连接(即self._recurrent_dropout_mask)。但是我对此不是100%自信。