소프트맥스 값의 합은 1에 수렴한다. (o) learning rate가 너무 작으면 diverge 하면서 cost가 점점 늘어난다 (x) Overfitting을 방지하는 방법으로는 더 많은 양의 학습 데이터, 더 적은 양의 feature, regularization이 있다. (o)
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)
W = torch.zeros((4, 3), requires_grad=True)
b = torch.zeros(1, requires_grad=True)
optimizer = optim.SGD([W, b], lr=0.01)
nb_epochs = 1000
for epoch in range(nb_epochs + 1):
hypothesis = F.softmax(x_train.matmul(W) + b, dim=1) # or .mm or @
y_one_hot = torch.zeros_like(hypothesis)
y_one_hot.scatter_(1, y_train.unsqueeze(1), 1)
cost = (y_one_hot * -torch.log(F.softmax(hypothesis, dim=1))).sum(dim=1).mean()
optimizer.zero_grad()
cost.backward()
optimizer.step()
다음 코드를 F.cross_entropy를 통해 간단하게 만들어 보아라
#정답 코드 해당 부분만
for epoch in range(nb_epochs + 1):
z = x_train.matmul(W) + b # or .mm or @
cost = F.cross_entropy(z, y_train)
optimizer.zero_grad()
cost.backward()
optimizer.step()