【发布时间】:2021-04-16 23:15:10
【问题描述】:
假设我将一个向量与一个标量相乘,例如:
a = tf.Variable(3.)
b = tf.Variable([1., 0., 1.])
with tf.GradientTape() as tape:
c = a*b
grad = tape.gradient(c, a)
我得到的梯度是一个标量,
<tf.Tensor: shape=(), dtype=float32, numpy=2.0>
而我们期望向量:
<tf.Variable 'Variable:0' shape=(3,) dtype=float32, numpy=array([1., 0., 1.], dtype=float32)>
查看其他示例,似乎 tensorflow 对预期向量求和,也用于标量矩阵乘法等。
为什么张量流会这样做?使用@custum_gradient 可能可以避免这种情况,是否有另一种不太麻烦的方法来获得正确的渐变?
似乎有一些相关的问题,但这些似乎都考虑了在训练批次上聚合的损失函数的梯度。这里没有使用损失函数或聚合,所以我认为问题是别的?
【问题讨论】:
标签: python tensorflow