2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

多次元の勾配でAutogradを実行する

Posted at

#事の経緯
基本的なネットワークであれば

output = net(input)
loss = loss_fn(output)
optimizer.zero_grad()
loss.backward()
optimizer.step()

このように、5行で終わってしまう誤差逆伝播ですが、このbackward()が使えるのは

Tensorがスカラーの時です。

諸事情があり、多次元のTensorを使って勾配を繋げ、Autogradしたいとします。(笑)

(すなわち、勾配の一部を外部ライブラリに依存する形で求めたがために、Autogardの始点がスカラーでなくなってしまった時)

チェインルールで計算するため、勾配をAutogradに渡すやり方を説明します。

色々調べた結果以下

#やりかた

output = net(input)

##(なんらかの処理で、勾配を求める)##
##(some_function内では外部ライブラリに依存した処理が行われており)##
##(autogradが適用出来ない)##
outputGrad = some_function(output, ground_Truth)

optimizer.zero_grad()
torch.autograd.backward([output], [outputGrad])
optimizer.step()

これで勾配を渡すことが出来ます

事情が分かる人には分かると思います。。。(笑)

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?