Python 如果退出率大于等于,则尝试仅构造DropOutRapper操作时出错;使用tf.cond()的0

Python 如果退出率大于等于,则尝试仅构造DropOutRapper操作时出错;使用tf.cond()的0,python,tensorflow,Python,Tensorflow,为了查看它是否使我的模型的训练更有效,我尝试仅在指定的dropoutrapper退出率大于0时调用TensorFlow的dropoutrapper操作(而不是创建操作,而不是实际添加任何退出)。我还尝试将L2正则化添加到我的损失值中,以实现同样的效果-如果L2_alpha乘数值大于零,则仅执行计算L2惩罚的方法 以下是我如何为辍学学生实现这一目标的: layers = [] for layer_size in self.hidden_sizes: cell = self.cell_typ

为了查看它是否使我的模型的训练更有效,我尝试仅在指定的
dropoutrapper
退出率大于0时调用TensorFlow的
dropoutrapper
操作(而不是创建操作,而不是实际添加任何退出)。我还尝试将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.`
`TypeError:无法将类型的对象转换为Tensor。目录:。将铸造元素考虑为支持类型。

是否有一种方法可以使用
tf.cond()
或任何其他方法来实现这一点?

是否
self.dropout\u rate
是由其他过程(如贝叶斯优化或退火)计算的变量?如果不是,那么为什么不直接使用普通If。。。其他的如果确实是这样,我想说实际上不太可能达到0,对吗?
辍学率
是一个占位符,因此在会话启动之前不会填充值。如果……否则。。。需要在创建图表时进行评估。它的要点是在训练中应用辍学,而不是在预测时间。我将查看
dropoutrapper
源代码-也许它会检查值是否为0并立即返回。问题是,您正在将dropoutrapper类型的对象添加到层列表中,同时需要dropoutrapper调用的结果。如果你有输入到层的占位符,只需做
tensorflow.contrib.rnn.dropoutrapper(单元格,输出保持概率=(1.0-self.dropout\u rate))(输入)
@KOB不幸的是,源代码说如果dropout\u rate不是
float
,它就会做dropout。我认为,由于
tf.cond
中的
fn()
必须是张量,因此您也可以初始化
dropoutrapper
单元格(它是类)(只需给它一个不同的名称,例如,
cell\u drop
,或输入op字典)。原因是类的初始化不需要太多计算资源,只有
\uuuu调用
需要。因此,当应用单元格时,可以执行类似于
outputs=tf.cond(self.dropout\u rate>0.0、cell\u drop.apply(输入)、cell.apply(输入))的操作。