最適化関数のNNへの適用
ごく簡単なニューラルネットを考えましょう。
code:optim.py
import torch.optim as optim
import torch.nn as nn
class Net(nn.Module):
def __init__(self, n_input, n_hidden, n_output):
super().__init__()
self.lin1 = nn.Linear(n_input, n_hidden)
self.lin2 = nn.Linear(n_hidden, n_output)
model = Net(4, 10, 3)
上のように
入力層:4
中間層:10
出力層:3
からなるニューラルネットのクラス定義を行い、そのインスタンスを生成しました。このネットは
入力層から中間層への伝播: (10, 4)の重み行列と、(10, )のバイアス
中間層から出力層への伝播:(3, 10)の重み行列と、(3, )のバイアス
以上4つのテンソルから構成されています。
code:(続き).py
params = model.parameters()
for param in params:
print(type(param), param.shape)
print(param)
print('----------------------')
更に実行結果からも分かるとおりこれらには、勾配属性が設定されています。
そこで、次のようにすることで、このネットのパラメータを最適化器のターゲットに設定することができます。
code:(続き).py
lr = 0.1
optimizer = optim.SGD(model.parameters(), lr=lr)
この時点では、このネットのパラメータに対応する勾配の値が設定されていないため、stepメソッドによるターゲットの更新を行うことはできません。
/icons/hr.icon
※ ブラウザのバックボタンで戻る