10

据我所知, DropoutWrapper 的使用如下

__init__(
cell,
input_keep_prob=1.0,
output_keep_prob=1.0,
state_keep_prob=1.0,
variational_recurrent=False,
input_size=None,
dtype=None,
seed=None
)

.

cell = tf.nn.rnn_cell.LSTMCell(state_size, state_is_tuple=True)
cell = tf.nn.rnn_cell.DropoutWrapper(cell, output_keep_prob=0.5)
cell = tf.nn.rnn_cell.MultiRNNCell([cell] * num_layers, state_is_tuple=True)

我唯一知道的是它用于训练时的辍学。这是我的三个问题

  1. input_keep_prob、output_keep_prob 和 state_keep_prob 分别是什么?(我猜他们定义了 RNN 每一部分的 dropout 概率,但具体在哪里?)

  2. 这种情况下的 dropout 是否不仅适用于 RNN 训练,还适用于预测过程?如果是真的,有没有办法决定我是否在预测过程中使用 dropout?

  3. 作为tensorflow网页中的API文档,如果variational_recurrent=True dropout根据论文“Y. Gal, Z Ghahramani.“A Theoretically Grounded Application of Dropout in Recurrent Neural Networks”中的方法工作。https: //arxiv.org/ abs/1512.05287 "我大致了解了这篇论文。当我训练 RNN 时,我使用“批处理”而不是单个时间序列。在这种情况下,tensorflow会自动为批次中的不同时间序列分配不同的dropout掩码吗?
4

2 回答 2

2
  1. input_keep_prob用于拟合特征权重时添加的 dropout 级别(包含概率)。output_keep_prob用于为每个 RNN 单元输出添加的 dropout 级别。state_keep_prob用于馈送到下一层的隐藏状态。
  2. 您可以按如下方式初始化上述每个参数:
import tensorflow as tf
dropout_placeholder = tf.placeholder_with_default(tf.cast(1.0, tf.float32))
tf.nn.rnn_cell.DropoutWrapper(tf.nn.rnn_cell.BasicRNNCell(n_hidden_rnn),

input_keep_prob = dropout_placeholder, output_keep_prob = dropout_placeholder, 
state_keep_prob = dropout_placeholder)

默认的 dropout 级别将在预测期间为 1 或我们在训练期间可以提供的任何其他值。

  1. 屏蔽是针对拟合的权重进行的,而不是针对批次中包含的序列。据我所知,它是为整个批次完成的。
于 2019-05-12T15:49:36.273 回答
-3
keep_prob = tf.cond(dropOut,lambda:tf.constant(0.9), lambda:tf.constant(1.0))

cells = rnn.DropoutWrapper(cells, output_keep_prob=keep_prob) 
于 2017-10-31T02:13:44.917 回答