【问题标题】:Loss value in Linear regression线性回归中的损失值
【发布时间】:2020-11-25 21:27:44
【问题描述】:

我用波士顿数据集做了一个线性回归问题,我得到了下一个结果:

损失值不会随着价值数量的增加而变化。这个错误的原因是什么?请帮帮我

import pandas as pd
import torch
import numpy as np
import torch.nn as nn
from sklearn import preprocessing
training_set=pd.read_csv('boston_data.csv')
training_set=training_set.to_numpy()
test_set=test_set.to_numpy()
inputs=training_set[:,0:13]
inputs=preprocessing.normalize(inputs)
target=training_set[:,13:14]
target=preprocessing.normalize(target)
inputs=torch.from_numpy(inputs)
target=torch.from_numpy(target)
test_set=torch.from_numpy(test_set)
w=torch.randn(13,1,requires_grad=True)
b=torch.randn(404,1,requires_grad=True)
def model(x):
    return x@w+b
pred=model(inputs.float())
def loss_MSE(x,y):
    ras=x-y
    return torch.sum(ras * ras) / ras.numel()
for i in range(100):
    pred=model(inputs.float())
    loss=loss_MSE(target,pred)
    loss.backward()
    with torch.no_grad():
        w -= w.grad * 1e-5
        b -= b.grad * 1e-5
        w.grad.zero_()
        b.grad.zero_()
    print(loss) 

【问题讨论】:

  • 随着EPOCH数量的增加

标签: python pandas numpy pytorch loss


【解决方案1】:

欢迎使用 Stackoverflow

你的主循环很好(你本可以让你的生活更轻松,但你应该阅读this),但你的学习率(1e-5)很可能太低了 .

我尝试了一个小的虚拟问题,它以大约 1e-2 的学习率很快就解决了,而使用 1e-5 则需要更长的时间。无论如何,它确实会收敛,但是在 100 多个 epoch 之后。您提到您尝试增加 epoch 的数量,但没有写出您实际运行实验的次数。 请尝试增加此参数(学习率),看看它是否解决了您的问题。您也可以尝试通过numel() 去除除法,效果相同(除法也适用于渐变)。

下次,请提供small minimal example 可以运行并帮助重现您的错误。在这里,您的大部分代码都是数据加载,可以用 2 行虚拟数据生成替换。

【讨论】:

    猜你喜欢
    • 2020-05-04
    • 2021-06-21
    • 2018-11-07
    • 2020-11-01
    • 2017-10-14
    • 2021-03-26
    • 2021-06-17
    • 1970-01-01
    • 2020-12-01
    相关资源
    最近更新 更多