📜  PyTorch-线性回归(1)

📅  最后修改于: 2023-12-03 15:34:33.118000             🧑  作者: Mango

PyTorch线性回归

PyTorch是一个流行的深度学习框架,它提供了丰富的工具与API,使得训练神经网络变得方便快捷。在本篇文章中,我们将介绍如何使用PyTorch实现一个简单的线性回归模型。

数据集

我们将使用一个非常著名的数据集,即波士顿房价数据集。该数据集包含了波士顿地区房产价格及其相关特征。我们可以使用sklearn库中的load_boston方法来加载该数据集。

from sklearn.datasets import load_boston

boston = load_boston()
x = boston.data
y = boston.target.reshape(-1, 1)
构建模型

我们使用PyTorchnn.Module来创建一个线性回归模型。使用nn.Linear方法定义一个线性层,并在__init__函数中传入输入和输出的维度。

import torch.nn as nn

class LinearRegression(nn.Module):
    def __init__(self, in_dim, out_dim):
        super(LinearRegression, self).__init__()
        self.linear = nn.Linear(in_dim, out_dim)
    
    def forward(self, x):
        out = self.linear(x)
        return out
定义损失函数与优化器

在线性回归中,我们通常选择均方差误差作为损失函数。PyTorch提供了很多标准的损失函数,例如MSELoss。我们还需要定义一个优化器,这里选择Adam优化器。

import torch.optim as optim

criterion = nn.MSELoss()    # 定义损失函数为均方差误差
optimizer = optim.Adam(model.parameters(), lr=0.01)   # 定义优化器为Adam优化器,学习率为0.01
训练模型

训练一个深度学习模型的主要步骤是:准备数据、定义模型、定义损失函数与优化器、循环迭代训练。在循环迭代中,我们需要将输入数据和输出标签转化为Tensor格式,并在计算损失值之后使用优化器来更新模型的参数。一般来说,训练模型需要迭代若干次,并且记录训练过程中的损失值,以便于后续进行可视化和模型的评估。

import torch

model = LinearRegression(x.shape[1], 1)
epochs = 100

loss_vals = []   # 存储损失值

for epoch in range(1, epochs+1):

    # 转化为Tensor格式,并计算损失值
    inputs = torch.from_numpy(x).float()
    targets = torch.from_numpy(y).float()
    outputs = model(inputs)
    loss = criterion(outputs, targets)

    # 更新模型的参数
    optimizer.zero_grad()
    loss.backward()
    optimizer.step()

    # 记录训练过程中的损失值
    loss_vals.append(loss.item())

    if epoch % 10 == 0:
        print(f'Epoch[{epoch}/{epochs}] Loss: {loss.item():.4f}')

可视化损失值

训练过程中损失值的变化情况对于评估模型的性能非常重要。我们可以使用matplotlib库来可视化损失值的变化情况。

import matplotlib.pyplot as plt

plt.figure(figsize=(10, 5))
plt.plot(range(1, epochs+1), loss_vals)
plt.xlabel('Epochs')
plt.ylabel('Loss')
plt.title('Training Loss')
plt.show()
保存模型

训练好模型后,我们需要将其保存下来以便之后进行评估和使用。以下代码可以将我们训练好的模型保存在本地文件夹。

PATH = 'linear_regression_model.pt'
torch.save(model.state_dict(), PATH)
加载模型

当我们需要重新使用之前训练好的模型时,可以使用torch.load方法将模型加载回来。

model = LinearRegression(x.shape[1], 1)
model.load_state_dict(torch.load(PATH))
model.eval()
实际预测

在使用模型进行预测时,我们需要将输入数据转化为Tensor格式,并通过训练好的模型获得预测值。

import numpy as np

new_data = np.array([[0.00632, 18.0, 2.31, 0.0, 0.538, 6.575, 65.2, 4.0900, 1.0, 296.0, 15.3, 396.90, 4.98]])
inputs = torch.from_numpy(new_data).float()
outputs = model(inputs)
print(f'Prediction: {outputs.item()}')

以上就是如何使用PyTorch实现一个简单的线性回归模型的全部过程。