梯度传播通过TensorArray

时间:2017-11-04 18:37:18

标签: python tensorflow

我不确定我是否理解如何在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]

我是否误解了这件事是如何运作的?

1 个答案:

答案 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]