我正在创建一个tf.Variable(),然后使用该变量创建一个简单的函数,然后我使用tf.reshape()展平原始变量,然后我在函数和展平变量之间使用tf.gradients().为什么返回[无].
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)
Run Code Online (Sandbox Code Playgroud)
执行上面的代码块返回[None].这是一个错误吗?请帮忙!
f您正在找到关于 的导数var_f,但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)
Run Code Online (Sandbox Code Playgroud)
你的梯度将被定义:
tf.张量 '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')
Run Code Online (Sandbox Code Playgroud)
的导数grad_1未定义,而 forgrad_2的导数已定义。显示了两个梯度的反向传播图(梯度图)。
| 归档时间: |
|
| 查看次数: |
2090 次 |
| 最近记录: |