Tensorflow tf.梯度会通过tf.cond吗?

Tensorflow tf.梯度会通过tf.cond吗?,tensorflow,Tensorflow,我想创建一对递归神经网络,比如NN1和NN2,其中NN2从上一时间步复制其输出,并且每当NN1输出与上一时间步不同的值时,不会在当前时间步更新其权重 为此,我计划使用tf.cond()和tf.stop\u gradients()。然而,在我运行的所有玩具示例中,我无法让tf.gradients()通过tf.cond():tf.gradients()只返回[None] 下面是一个简单的玩具示例: 将tensorflow导入为tf x=tf.常数(5) y=tf.常数(3) mult=tf.乘(x,

我想创建一对递归神经网络,比如NN1和NN2,其中NN2从上一时间步复制其输出,并且每当NN1输出与上一时间步不同的值时,不会在当前时间步更新其权重

为此,我计划使用
tf.cond()
tf.stop\u gradients()
。然而,在我运行的所有玩具示例中,我无法让
tf.gradients()
通过
tf.cond()
tf.gradients()
只返回
[None]

下面是一个简单的玩具示例:

将tensorflow导入为tf
x=tf.常数(5)
y=tf.常数(3)
mult=tf.乘(x,y)
cond=tf.cond(pred=tf.const(True)),
真的_fn=lambda:mult,
false_fn=lambda:mult)
梯度=tf.梯度(条件,x)#返回[无]
这里是另一个简单的玩具示例,我在
tf.cond()
中定义
true\u fn
false\u fn
(仍然没有骰子):

将tensorflow导入为tf
x=tf.常数(5)
y=tf.常数(3)
z=tf.常数(8)
cond=tf.cond(pred=x

我最初认为梯度应该同时通过
true\u fn
false\u fn
,但显然没有梯度在流动。这是通过
tf.cond()
计算的渐变的预期行为吗?有没有办法解决这个问题?

是的,渐变将通过
tf.cond()
。您只需要使用浮点数而不是整数,并且(最好)使用变量而不是常量:


导入tensorflow作为tf
x=tf.Variable(5.0,dtype=tf.float32)
y=tf.Variable(6.0,dtype=tf.float32)
z=tf.Variable(8.0,dtype=tf.float32)
cond=tf.cond(pred=x