3D 空間でスカラー フィールドの値を計算する関数があるため、x、y、z 座標 (numpy.meshgrid で取得) の 3D テンソルをフィードし、どこでも要素ごとの操作を使用します。これは期待どおりに機能します。
次に、スカラー フィールドの勾配を計算する必要があります。私はtheano.tensor.grad
andをいじっていましたがtheano.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]]}))
印刷します
[[ 2. 0.]
[ 0. 0.]]
私が期待している間
[[ 2. 4.]
[ 2. 4.]]
私もヤコビアンで試しました:
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]]}))
返す
[[[ 2. 0.]
[ 0. 0.]]
[[ 0. 4.]
[ 0. 0.]]
[[ 0. 0.]
[ 2. 0.]]
[[ 0. 0.]
[ 0. 4.]]]
(ゼロ以外の要素を一緒にすると、前の例から予想される行列が得られます)
必要な elmentwise グラデーションを取得する方法はありますか?
たとえば、関数をスカラー (スカラーに 3 つのスカラー) として定義して、座標テンソルに要素ごとに適用できますか? このようにして、導関数も単純なスカラーになり、すべてがスムーズに機能します。