Tensorflow:张量的单个元素连接期间的 ZeroDivisionError
Tensorflow: ZeroDivisionError during concat of singel elements of tensor
我目前正在 python 制作一个“四胜”演员评论家。在尝试反向传播之前收集的动作概率分布时,我遇到了以下错误:ZeroDivisionError: integer division or modulo by zero
我能够重现错误:
import tensorflow as tf
with tf.GradientTape() as tape:
t = tf.Variable([1.])
concat = tf.concat(values=[t[0], t[0]], axis=0)
concat_sum = tf.reduce_sum(concat)
grads = tape.gradient(concat_sum, t)
我知道这个问题在这个代码示例中可能听起来微不足道。为什么这里有错误对我来说仍然是不可理解的!如果连接张量的第一个元素并最终添加它们不应该 与 相同:
with tf.GradientTape() as tape:
t = tf.Variable([1.])
result = t + t
grads = tape.gradient(result, t)
为什么一个生成有效梯度而另一个不生成?
我 运行 Tensorflow 版本 2.7.0 CPU (Ubuntu 20.04.3 LTS)
当您尝试连接不受支持的标量时会发生这种情况。 Tensorflow 不会在 eager 模式下引发错误,这显然是一个错误。 suggestion 宁可使用 tf.stack
:
import tensorflow as tf
with tf.GradientTape() as tape:
t = tf.Variable([1.])
result = t + t
grads = tape.gradient(result, t)
tf.print(grads)
with tf.GradientTape() as tape:
t = tf.Variable([1.])
stack = tf.stack(values=[t[0], t[0]], axis=0)
concat_sum = tf.reduce_sum(stack)
grads = tape.gradient(concat_sum, t)
tf.print(grads)
[2]
[2]
我目前正在 python 制作一个“四胜”演员评论家。在尝试反向传播之前收集的动作概率分布时,我遇到了以下错误:ZeroDivisionError: integer division or modulo by zero
我能够重现错误:
import tensorflow as tf
with tf.GradientTape() as tape:
t = tf.Variable([1.])
concat = tf.concat(values=[t[0], t[0]], axis=0)
concat_sum = tf.reduce_sum(concat)
grads = tape.gradient(concat_sum, t)
我知道这个问题在这个代码示例中可能听起来微不足道。为什么这里有错误对我来说仍然是不可理解的!如果连接张量的第一个元素并最终添加它们不应该 与 相同:
with tf.GradientTape() as tape:
t = tf.Variable([1.])
result = t + t
grads = tape.gradient(result, t)
为什么一个生成有效梯度而另一个不生成?
我 运行 Tensorflow 版本 2.7.0 CPU (Ubuntu 20.04.3 LTS)
当您尝试连接不受支持的标量时会发生这种情况。 Tensorflow 不会在 eager 模式下引发错误,这显然是一个错误。 suggestion 宁可使用 tf.stack
:
import tensorflow as tf
with tf.GradientTape() as tape:
t = tf.Variable([1.])
result = t + t
grads = tape.gradient(result, t)
tf.print(grads)
with tf.GradientTape() as tape:
t = tf.Variable([1.])
stack = tf.stack(values=[t[0], t[0]], axis=0)
concat_sum = tf.reduce_sum(stack)
grads = tape.gradient(concat_sum, t)
tf.print(grads)
[2]
[2]