tensorflow - Keras 和带有 dropout 的 LSTM 的 tensorflow 实现之间的区别
问题描述
我正在查看 tensorflow 和 Keras 中的 LSTM 单元的文档。特别是,我也想申请辍学。这是我在 Keras 中的内容,并希望在 tensorflow 中应用相同的 LSTM 单元:
cell = LSTM(num_units_2, return_sequences=True, dropout=dropout, recurrent_dropout=dropout)(net)
因此,我知道我需要tf.nn.rnn_cell.LSTMCell
在 tensorflow 中使用num_units = num_units_2
. 其次,我需要一个DropoutWrapper
as:
cell = tf.nn.rnn_cell.DropoutWrapper(cell)
现在,我想申请dropout
和recurrent_dropout
类似的 Keras 代码。因此,我发现 tensorflow 的 dropout 实现将在每个时间步应用不同的 dropout 掩码,除非variational_recurrent
设置为 True (但我不确定variational_recurrent 的详细工作原理)。
此外,我不确定 Keras 中的 LSTM 是否在每个时间步也应用不同的 Mask。
其次,我对两者都提到的 theoutput_keep_prob
和 the之间的区别感到困惑:state_keep_prob
output_keep_prob:单位Tensor或0到1之间的浮点数,输出保持概率;如果它是常数且为 1,则不会添加输出 dropout...
任何帮助深表感谢!!
解决方案
变分dropout有什么作用
据我所知,变分辍学的主要新颖之处在于对所有展开的步骤(如您所说)使用相同的辍学掩码。
output_keep_prob
和之间的区别state_keep_prob
output_keep_prob
是应用于 LSTM 单元的输出 (h) 的state_keep_prob
辍学率,其中是应用于 LSTM 状态的单元 (c) 的辍学率。
Keras 中的辍学选择
查看LSTM 源代码_generate_dropout_mask
中的方法及其对 Keras 的 LSTMCell 的使用,我认为 Keras LSTM 仅对循环连接(即)使用变分循环丢失。但我对此不是100%有信心。self._recurrent_dropout_mask
推荐阅读
- python - 如何分别提取每列中的重复值?
- ios - 如何实现泛型协议,该协议具有使用关联类型的类型的功能?
- python-3.x - 如何删除有条件的行以匹配字符串值
- php-7.3 - 如何在 switch case 中使用 continue 转到下一个 case
- java - 该循环不适用于第二次迭代
- ios - Apple pay:在网络上创建的支付令牌与应用内创建的支付令牌有区别吗?
- azure - 使用 Azure 流分析检测字符串参数的异常
- java - 如何在 Android 上访问 API 17 的联系人
- google-sheets - 如何根据三个水平和垂直标准选择价值?
- dialogflow-es - 在意图之间退出机器人