'tf.contrib.rnn.DropoutWrapper in tensorflow 到底是做什么的?(三个引证问题)



据我所知,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 每个部分的辍学概率,但确切地说 在哪里?

  2. 在这种情况下,辍学不仅在训练时应用于RNN,而且在预测过程中也应用于RNN?如果这是真的,有没有办法决定我是否在预测过程中使用辍学?

  3. 作为 Tensorflow 网页中的 API 文档,如果 variational_recurrent=True dropout 根据论文上的方法工作 "是的,加拉马尼。"辍学在递归神经网络中的理论应用"。https://arxiv.org/abs/1512.05287"我对这篇论文大致了解。 当我训练RNN时,我使用"批处理"而不是单个时间序列。在这种情况下,张量流会自动将不同的 dropout 掩码分配给批处理中的不同时间序列?
  1. input_keep_prob用于拟合要素权重时添加的辍学水平(包含概率(。output_keep_prob是针对为每个 RNN 单元输出添加的辍学级别。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)

在预测期间的默认辍学水平将为 1,或者我们可以在训练期间提供的任何其他内容。

  1. 掩蔽是针对拟合的权重而不是批次中包含的序列进行的。据我所知,它是为整个批次完成的。
keep_prob = tf.cond(dropOut,lambda:tf.constant(0.9), lambda:tf.constant(1.0))
cells = rnn.DropoutWrapper(cells, output_keep_prob=keep_prob) 

相关内容

最新更新