왜 원하는 답이 안나올까요?ㅜㅜ

import torch
import torch.nn as nn
import torch.optim as op

X = torch.FloatTensor([[1., 2.],[2., 4.],[3., 6.]])
Y = torch.FloatTensor([[2.],[8.],[18.]])

class TEST(nn.Module):
def init(self):
super(TEST,self).init()
self.l1 = nn.Linear(2,1)

def forward(self, input):
    x = self.l1(input)
    return x

epochs = 2000
lr = 0.001

model = TEST()
loss_func = nn.MSELoss()
optimizer = op.SGD(model.parameters(), lr=lr)

for epoch in range(epochs):
optimizer.zero_grad()
output = model(X)
loss = loss_func(output, Y)
loss.backward()
optimizer.step()

if epoch%10 == 0:
    print('loss[{}] : {}'.format(epoch, loss))

XX = torch.FloatTensor([[4., 8.]])

print(model(XX))

이렇게하면 예상하기로 32가 나올것같은데

loss[1940] : 0.8890781402587891
loss[1950] : 0.8890655636787415
loss[1960] : 0.8890505433082581
loss[1970] : 0.8890388011932373
loss[1980] : 0.889029324054718
loss[1990] : 0.8890181183815002
tensor([[25.3124]], grad_fn=)

25가 나오더군요… 왜 그런건가용?

안녕하세요, @coolooc 님.

예제로 주신 X, Y 사이의 적절한 관계를 찾기 어려운데요
혹시 어떤 선형회귀 모델을 의도하시고 만드신 예시 데이터이실까요?

혹시 X의 각 행의 [x_1, x_2]에 대해서 [x_1 * x_2] = [y]와 같이 생각하시고 X, Y를 만드셨다면,
아래 문서들을 먼저 참고하시는 것이 좋을 것 같습니다. :smiley:

그렇군요 이제 시작하는 시기라서 따라해보고 있는데
아직 선형과 비선형의 개념만 알겠네요
구현하는것에 차이는 조금더 공부해야겟네요 ㅋ

2개의 좋아요