有条件地更新张量流中的变量

时间:2018-09-06 14:33:02

标签: tensorflow keras

我正在使用Keras / TF后端。我正在尝试使用随机初始化的张量来扩充输入张量。随机张量具有p变化的概率和1 - p保持不变的机会。然后,将随机张量转换为掩码,就像在TF中实现dropout一样。所有这些都包装在Keras自定义图层中。这是我必须要做的:

# x is input tensor to call()
t = K.dtype(x)
renewal = K.random_uniform(shape=(1,))
renewal_prob = K.constant(self.renewal_rate, dtype=t)
keep_prob = tf.Variable(self.dropout_rate, dtype=tf.as_dtype(t), trainable=False)
print(type(random_tensor))
random_tensor = K.switch(renewal > renewal_prob,
    lambda: K.update(random_tensor,
        tf.Variable(
            tf.random_uniform_initializer(0., 1., dtype=tf.as_dtype(t),
                seed=seed)(noise_shape),
            validate_shape=False, trainable=False) + keep_prob),
    lambda: K.identity(random_tensor))
# 0. if [keep_prob, 1.0) and 1. if [1.0, 1.0 + keep_prob)
binary_tensor = math_ops.floor(random_tensor)

中间的打印语句打印<class 'tensorflow.python.framework.ops.Tensor'>,这令人困惑。 AFAIK应该是变量吗?

在这一行:

--> 234                                 lambda: K.identity(random_tensor))

我得到了错误:

AttributeError: 'Tensor' object has no attribute 'assign'

我猜是对变量的任何操作都会返回张量,而不是Tensorflow中的另一个变量?如果是这种情况,我将如何有条件地更新张量?

0 个答案:

没有答案