cuốn sách gpt4 ai đã làm

python - 具有张量函数的 Theano 梯度

In lại Tác giả: Walker 123 更新时间:2023-11-28 17:27:36 29 4
mua khóa gpt4 Nike

我有一个计算 3D 空间标量场值的函数,所以我为它提供 x、y 和 z 坐标(由 numpy.meshgrid 获得)的 3D 张量,并在各处使用元素运算。这按预期工作。

现在我需要计算标量场的梯度。我一直在玩弄 theano.tensor.gradtheano.tensor.jacobian 我不明白元素运算的导数应该如何工作。

这是一个我不明白的 MWE:

import theano.tensor as T 

x, y = T.matrices("xy")

expr = x**2 + y
grad = T.grad(expr[0, 0], x)
print(grad.eval({x: [[1, 2], [1, 2]], y: [[1, 1], [2, 2]]}))

In

[[ 2. 0.]
[ 0. 0.]]

虽然我希望

[[ 2. 4.]
[ 2. 4.]]

我也尝试过 jacobian:

import theano.tensor as T

x, y = T.matrices("xy")

expr = x**2 + y
grad = T.jacobian(expr.flatten(), x)
print(grad.eval({x: [[1, 2], [1, 2]], y: [[1, 1], [2, 2]]}))

trở lại

[[[ 2. 0.]
[ 0. 0.]]

[[ 0. 4.]
[ 0. 0.]]

[[ 0. 0.]
[ 2. 0.]]

[[ 0. 0.]
[ 0. 4.]]]

(非零元素加在一起会给出我之前示例中的预期矩阵)

有什么方法可以得到我需要的 elmentwise 梯度吗?

例如,我能否以某种方式将函数定义为标量(将三个标量转换为一个标量)将其逐元素应用于坐标张量?这样导数也将只是一个简单的标量,一切都会顺利进行。

câu trả lời hay nhất

第一个元素 expr[0,0] 作为相对于 x 的成本仅与 x 的第一个元素相关,因此您收到的结果是正确的。

如果对整个 expr 数组求和,就会产生您期望的结果。 Theano 将负责通过 tổng hợp

向后传播梯度
import theano.tensor as T 

x, y = T.matrices("xy")

expr = x**2 + y
grad = T.grad(expr.sum(), x)
print(grad.eval({x: [[1, 2], [1, 2]], y: [[1, 1], [2, 2]]}))

In

[[ 2. 4.]
[ 2. 4.]]

关于python - 具有张量函数的 Theano 梯度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37497349/

29 4 0
Walker 123
Hồ sơ

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá taxi Didi miễn phí
Phiếu giảm giá taxi Didi
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress