이론 문제

소프트맥스 값의 합은 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()