我正在查看 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 代码的dropout
和recurrent_dropout
。因此,我发现 tensorflow 对 dropout 的实现将在每个时间步应用不同的 dropout 掩码,除非variational_recurrent
设置为 True(但我不确定variational_recurrent如何详细工作(。
此外,我不确定 Keras 中的 LSTM 是否在每个时间步也应用不同的掩码。
其次,我对output_keep_prob
和state_keep_prob
之间的区别感到困惑,因为两者都提到:
output_keep_prob:单位张量或浮点数在0到1之间,输出保持概率;如果它是常数和1,则不会添加输出dropout...
任何帮助都非常感谢!!
分辍学有什么作用
据我所知,变分辍学的主要新颖之处在于对所有展开的步骤使用相同的辍学掩码(如您所说(。
output_keep_prob
和state_keep_prob
的区别
output_keep_prob
是应用于 LSTM 单元输出 (h( 的辍学率,其中state_keep_prob
是应用于 LSTM 状态的单元 (c( 的辍学率。
克拉斯的辍学选择
查看 LSTM 源代码中的_generate_dropout_mask
方法及其对 Keras 的 LSTMCell 的使用,我认为 Keras LSTM 仅对循环连接使用变分递归 dropout(即self._recurrent_dropout_mask
(。但我对此不是100%有信心。