我不确定我是否理解如何在while_loops中正确使用TensorArray。我没有得到我期望的渐变 - 事实上,当我期待渐变时,我得到一个[无]渐变。
以下是TensorArray不按我的预期计算渐变的一个小例子:
a = tf.TensorArray( dtype=DTYPE, size=10, clear_after_read=False, )
a = a.write(0, tf.Variable(initial_value=1) )
b = tf.TensorArray( dtype=DTYPE, size=10, clear_after_read=False,)
b = b.write( 0, a.read(0) * 3 )
b = b.write( 1, b.read(0) * 3 )
tf.gradients( b.read(0), a.read(0) )
>> [None]
tf.gradients( b.read(1), b.read(0) )
>> [None]
我是否误解了这件事是如何运作的?
答案 0 :(得分:0)
我假设您现在已经解决了这个问题,但是无论如何都会发布答案。尝试计算梯度时,您正在进行新的操作。考虑grad(var + 1,var)给出一个梯度,而grad(var + 1,tf.identity(var))给出None。您的代码由于相同的原因而无法正常工作。
与此代码进行比较:
a=vpa(ones(2,2,2));
plus(a(:,:,1), a(:,:,2))
[ 2.0, 2.0]
[ 2.0, 2.0]