【问题标题】:Linear Regression in PyTorchPyTorch 中的线性回归
【发布时间】:2021-12-14 13:59:43
【问题描述】:

这是一个简单的回归问题。但是无论我怎么尝试,我都无法得到我想要的答案。我猜权重应该是 32 (4 * 8),但是代码返回 25。这是为什么呢?

这是我的完整源代码:

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))

这是代码的输出:

loss[1920] : 0.8891088366508484
loss[1930] : 0.8890921473503113
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=<AddmmBackward>)

【问题讨论】:

    标签: python machine-learning pytorch linear-regression


    【解决方案1】:

    您正在尝试逼近y = x1*x2,但使用的是单个线性层纯线性模型。最终,你正在学习权重ab,这样y = a*x1 + b*x2。但是这个模型不能近似x1, x2 -&gt; x1*x2的分布。

    【讨论】:

    • 这是他试图用线性模型逼近非线性函数的正确答案
    猜你喜欢
    • 2021-01-11
    • 2018-12-14
    • 1970-01-01
    • 2021-06-21
    • 2019-01-06
    • 2022-01-21
    • 2020-06-10
    • 2021-08-21
    • 2020-10-27
    相关资源
    最近更新 更多