【发布时间】:2020-03-05 09:34:16
【问题描述】:
我在使用tf.gradients 计算梯度时遇到了问题。
我的 x 是形状为 (4, 1) 的矢量 v 的 tf.constant()
而我的y是v的sigmoid,形状也是(4, 1),所以y相对于的梯度x 应该是形状为(4, 4) 的对角矩阵。
我的代码:
c = tf.constant(sigmoid(x_0@w_0))
d = tf.constant(x_0@w_0)
Omega = tf.gradients(c, d)
_Omega = sess.run(Omega)
错误是
Fetch 参数 None 的类型无效。
另外,我认为使用tf.gradients 可能是错误的,可能还有其他一些函数可以计算这个。
我的问题:
指出我错在哪里以及如何使用 tf.gradients 解决它
或使用其他功能。
编辑: 想要像这样计算导数:参见 vector_by_vector 部分https://en.wikipedia.org/wiki/Matrix_calculus#Vector-by-vector 结果 Omega 如下所示:
[[s1(1-s1) 0 0 0 ]
[0 s2(1-s2) 0 0 ]
[0 0 s3(1-s3) 0 ]
[0 0 0 s4(1-s4)]]
其中 si = sigmoid(x_0i@w_0),其中 x_0i 是 x_0 的第 i 行。 一般来说,计算一个向量在另一个向量上,应该是一个矩阵。
【问题讨论】:
标签: tensorflow