pytorch 线性reg 总是训练到意思

问题描述 投票:0回答:0
import pandas as pd
import torch
from torch import nn
import numpy as np

data_url = "http://lib.stat.cmu.edu/datasets/boston"
raw_df = pd.read_csv(data_url, sep="\s+", skiprows=22, header=None)
data = np.hstack([raw_df.values[::2, :], raw_df.values[1::2, :2]])
target = raw_df.values[1::2, 2]

x = torch.tensor(data[:, -1], dtype=torch.float32)
y = torch.tensor(target, dtype=torch.float32)
x = x.unsqueeze(1)
print(x.shape)

class Model(nn.Module):

  def __init__(self, n_features, n_neurons, num_classes):
    super(Model, self).__init__()
    self.model = nn.Sequential(
        nn.Linear(n_features, num_classes),
    )
  def forward(self, x):
    return self.model(x)


model = Model(n_features=1, n_neurons=1, num_classes=1)
optimizer = torch.optim.Adam(model.parameters(), lr=0.01)
loss_function = nn.MSELoss()

for epoch in range(10000):
  optimizer.zero_grad()
  output = model(x)
  loss_value = loss_function(output, y)
  loss_value.backward()
  optimizer.step()

有什么问题吗?这个最简单的线性模型经过训练可以始终预测平均值。尽管普通线性回归的预测效果要好 3 倍。此外,我已经手动使用 pytorch 实现了线性回归,一切正常。但是,使用 nn 模块的这种实现不起作用。可能是什么问题?
p.s 您可以在计算机上运行代码 - 将从 url 加载标准波士顿房价数据。

尝试了 scklearn 的默认 Linear reg,火炬手实现,一切正常,结果良好(mse < 35).

machine-learning deep-learning pytorch linear-regression torch
© www.soinside.com 2019 - 2024. All rights reserved.