softmax regression이란 : 함수를 통해 분류해야 되는 정답지(클래스)의 총 개수를 k라고 할 때, k차원의 벡터를 입력 받아서, 각 클래스에 대한 확률을 추정하는 회귀방식.
1. binary classification VS K - classification
F.softmax(변수명, dim=차원수
)를 통해서 구현함.F.cros_entropy()
, F.log_softmax()
,F.nll_loss()
등을 활용해서 식을 간소화해서 나타내 줄 수 도 있음. 경우에 따라 직접구현 하는 경우, 혹은 함수를 활용해야 하는 경우가 다르니 유의할 것. import torch
import torch.nn as nn
import torch.nn.functional as F
import torch.optim as optim
# For reproducibility
torch.manual_seed(1)
x_train = [[1, 2, 1, 1],
[2, 1, 3, 2],
[3, 1, 3, 4],
[4, 1, 5, 5],
[1, 7, 5, 5],
[1, 2, 5, 6],
[1, 6, 6, 6],
[1, 7, 7, 7]]
y_train = [2, 2, 2, 1, 1, 1, 0, 0]
x_train = torch.FloatTensor(x_train)
y_train = torch.LongTensor(y_train)
class SoftmaxClassifierModel(nn.Module):
def __init__(self):
super().__init__()
self.linear = nn.Linear(4, 3) # Output이 3!
def forward(self, x):
return self.linear(x)
model = SoftmaxClassifierModel()
# optimizer 설정
optimizer = optim.SGD(model.parameters(), lr=0.1)
nb_epochs = 1000
for epoch in range(nb_epochs + 1):
# H(x) 계산
prediction = model(x_train)
# cost 계산
cost = F.cross_entropy(prediction, y_train)
# cost로 H(x) 개선
optimizer.zero_grad()
cost.backward()
optimizer.step()
# 20번마다 로그 출력
if epoch % 100 == 0:
print('Epoch {:4d}/{} Cost: {:.6f}'.format(
epoch, nb_epochs, cost.item()
))