【pytorchでニューラルネットワーク#3】パラメータ更新(optimizer)

記事の目的

pytorchでニューラルネットワークを実装する上で必要になるパラメータ更新について実装していきます。ここにある全てのコードは、コピペで再現することが可能です。

 

目次

  1. ライブラリ
  2. 自動微分
  3. パラメータ更新
  4. パラメータ推定

 

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