首页 > 解决方案 > 如果 dropout rate > 0 使用 tf.cond() 尝试仅构造 DropoutWrapper 操作时出错

问题描述

为了查看它是否使我的模型的训练更有效,我试图仅DropoutWrapper在指定dropout_rate大于 0 时调用 TensorFlow 的操作(而不是创建操作,但实际上并未添加任何 dropout)。我也试图通过将 L2 正则化添加到我的损失值来做同样的事情 - 如果l2_alpha乘数值大于零,则只执行我计算 L2 惩罚的方法。

以下是我尝试实现辍学的方法:

layers = []
for layer_size in self.hidden_sizes:
    cell = self.cell_type(layer_size)
    cell = tf.cond(
        self.dropout_rate > 0.0,
        lambda: tensorflow.contrib.rnn.DropoutWrapper(cell, output_keep_prob=(1.0 - self.dropout_rate)),
        lambda: cell
    )
    layers.append(cell)
stacked_layers = tensorflow.contrib.rnn.MultiRNNCell(layers)

这是抛出错误:

`TypeError: Failed to convert object of type <class 'tensorflow.python.ops.rnn_cell_impl.DropoutWrapper'> to Tensor. Contents: <tensorflow.python.ops.rnn_cell_impl.DropoutWrapper object at 0x7fa51b84bbe0>. Consider casting elements to a supported type.`

有没有办法可以使用tf.cond()或任何其他方式实现这一目标?

标签: pythontensorflow

解决方案


推荐阅读