【pytorchでニューラルネットワーク#3】パラメータ更新(optimizer)
記事の目的
pytorchでニューラルネットワークを実装する上で必要になるパラメータ更新について実装していきます。ここにある全てのコードは、コピペで再現することが可能です。
目次
1 ライブラリ
# In[1] import torch from torch import nn import torch.optim as optim torch.manual_seed(1)
2 自動微分
# In[2] x = torch.tensor([1,2,3,4,5]).unsqueeze(1).float() t = torch.tensor([5,8,11,14,17]).unsqueeze(1).float() # In[3] linear = nn.Linear(1,1) MSE = nn.MSELoss() # In[4] y = linear(x) L = MSE(y,t) L.backward() # In[5] linear.weight, linear.bias # In[6] linear.weight.grad, linear.bias.grad
3 パラメータ更新
# In[7] linear = nn.Linear(1,1) MSE = nn.MSELoss() optimizer = optim.SGD(linear.parameters(), lr=1e-3) # In[8] linear.weight, linear.bias # In[9] y = linear(x) L = MSE(y,t) L.backward() optimizer.step() # In[10] linear.weight, linear.bias
4 パラメータ推定
# In[11] x = torch.tensor([1,2,3,4,5]).unsqueeze(1).float() t = torch.tensor([5,8,11,14,17]).unsqueeze(1).float() # In[12] linear = nn.Linear(1,1) MSE = nn.MSELoss() optimizer = optim.SGD(linear.parameters(), lr=1e-2) # In[13] for epoch in range(1000): y = linear(x) L = MSE(y,t) optimizer.zero_grad() L.backward() optimizer.step() # In[14] linear.weight, linear.bias