In [6]:
%matplotlib inline
Tensorflow로 구현되어 있는 golbin님의 예제에서 같은 문제를 가지고 pytorch로 구현하도록 하겠습니다.
털과 날개가 있는지 없는지에 따라서 포유류와 조류를 분류하는 신경망 모델입니다.
In [61]:
import torch
from torch.autograd import Variable
import torch.nn as nn
import torch.nn.functional as F
# [털, 날개]
x_data = torch.Tensor(
[[0, 0], [1, 0], [1, 1], [0, 0], [0, 0], [0, 1]])
# 0: 기타 , 1: 포유류, 2: 조류
y_data = torch.LongTensor([0, 1, 2, 0, 0, 2])
In [62]:
#commnet
class _model(nn.Module) :
def __init__(self):
super(_model, self).__init__()
self.fc1 = nn.Linear(2, 10)
self.fc2 = nn.Linear(10, 3)
def forward(self, net):
net = net.view(-1, 2)
net = F.relu(self.fc1(net))
net = self.fc2(net)
return F.log_softmax(net)
model = _model()
loss_fn = nn.NLLLoss()
optimizer = torch.optim.SGD(model.parameters(), lr=0.01)
In [65]:
# trainning
for i in range(100) :
# input variable
x = Variable(x_data)
y = Variable(y_data)
# network model
y_pred = model(x)
loss = loss_fn(y_pred, y)
# zero_grad, backward, step(update parameter) in series
optimizer.zero_grad()
loss.backward()
optimizer.step()
if i % 10 == 0:
print(i, loss.data[0])
In [66]:
y_pred = model(x).max(1)[1]
print('prediction :', y_pred.data)
print('true :', y)