optimによるテンソルの更新(多次元の場合)
optimの提供する最適化オブジェクトは、対象が多次元のテンソルの場合にも値の更新を行うことができる。
code:optim2.py
import torch as pt
import torch.optim as optim
x0 = 1, 2
alpha = 0.1
x = pt.tensor(x0, dtype=pt.float, requires_grad=True)
optimizer = optim.SGD(x, lr=alpha) y = x@x.T
y.backward()
print('# 更新前 --------------')
print('x:', x)
print('x.grad:', x.grad)
optimizer.step()
print('# 更新後 --------------')
print('x:', x)
この場合、
$ x = \left[\begin{array}{cc}1 & 2\end{array}\right], x.grad = \left[\begin{array}{cc}2 & 4\end{array}\right]
であるので、stepメソッドにより行われる計算は
$ x - \alpha \times x.grad \rightarrow x
$ \left[\begin{array}{cc} 1 & 2 \end{array}\right] - 0.1\times \left[\begin{array}{cc} 2 & 4\end{array}\right] = \left[\begin{array}{cc}0.8 & 1.6\end{array}\right] \rightarrow x
となる。
code:(結果).py
x: tensor(1., 2., requires_grad=True)
x.grad: tensor(2., 4.)
x: tensor(0.8000, 1.6000, requires_grad=True)
/icons/hr.icon
※ ブラウザのバックボタンで戻る