gpt4 book ai didi

python - 为什么 Tensorflow Reshape tf.reshape() 会破坏梯度流?

转载 作者:太空狗 更新时间:2023-10-30 00:05:16 27 4
gpt4 key购买 nike

我正在创建一个 tf.Variable(),然后使用该变量创建一个简单的函数,然后我使用 tf.reshape() 展平原始变量,然后我在函数和展平变量之间使用了 tf.gradients()。为什么会返回 [None]

var = tf.Variable(np.ones((5,5)), dtype = tf.float32)
f = tf.reduce_sum(tf.reduce_sum(tf.square(var)))
var_f = tf.reshape(var, [-1])
print tf.gradients(f,var_f)

上面的代码块在执行时返回[None]。这是一个错误吗?请帮忙!

最佳答案

您正在寻找关于 var_ff 的导数,但是 f 不是 var_f 的函数而不是 var。这就是为什么你得到[无]。现在,如果您将代码更改为:

 var = tf.Variable(np.ones((5,5)), dtype = tf.float32)
var_f = tf.reshape(var, [-1])
f = tf.reduce_sum(tf.reduce_sum(tf.square(var_f)))
grad = tf.gradients(f,var_f)
print(grad)

您的渐变将被定义:

tf.Tensor 'gradients_28/Square_32_grad/mul_1:0' shape=(25,) dtype=float32>

以下代码的图形可视化如下:

 var = tf.Variable(np.ones((5,5)), dtype = tf.float32, name='var')
f = tf.reduce_sum(tf.reduce_sum(tf.square(var)), name='f')
var_f = tf.reshape(var, [-1], name='var_f')
grad_1 = tf.gradients(f,var_f, name='grad_1')
grad_2 = tf.gradients(f,var, name='grad_2')

enter image description here

grad_1 的导数未定义,而 grad_2 的导数已定义。显示了两个梯度的反向传播图(梯度图)。

关于python - 为什么 Tensorflow Reshape tf.reshape() 会破坏梯度流?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44836859/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com