我正在使用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中的另一个变量?如果是这种情况,我将如何有条件地更新张量?