本文将介绍如何使用 PyTorch 实现一个简单的线性回归模型。线性回归是一种监督学习方法,通过最小二乘法可以求出其方程。

步骤:

  1. 定义训练集: 首先,我们定义一个简单的训练集,其中 x 和 y 的值成正比。
  2. 定义线性回归模型: 使用 PyTorch 中的 nn.Linear 类定义一个线性模型,其输入和输出的维度都为 1。
  3. 定义损失函数和优化器: 选择均方误差作为损失函数,并使用随机梯度下降作为优化器。
  4. 训练模型: 通过前向传播计算输出、计算损失、反向传播和更新参数来训练模型。
  5. 测试模型: 使用训练好的模型对训练集进行测试,并输出预测结果。

代码示例:

import torch
import torch.nn as nn

# 定义训练集
x_train = torch.Tensor([[1.0], [2.0], [3.0], [4.0]])
y_train = torch.Tensor([[2.0], [4.0], [6.0], [8.0]])

# 定义线性回归模型
class LinearRegression(nn.Module):
    def __init__(self):
        super(LinearRegression, self).__init__()
        self.linear = nn.Linear(1, 1)  # 输入和输出的维度都为 1

    def forward(self, x):
        out = self.linear(x)
        return out

# 定义模型、损失函数和优化器
model = LinearRegression()
criterion = nn.MSELoss()  # 均方误差损失函数
optimizer = torch.optim.SGD(model.parameters(), lr=0.01)  # 随机梯度下降优化器

# 训练模型
num_epochs = 1000
for epoch in range(num_epochs):
    inputs = x_train
    labels = y_train

    # 前向传播
    outputs = model(inputs)
    loss = criterion(outputs, labels)

    # 反向传播和优化
    optimizer.zero_grad()  # 梯度清零
    loss.backward()  # 反向传播
    optimizer.step()  # 更新参数

    if (epoch+1) % 100 == 0:
        print('Epoch [{}/{}], Loss: {:.4f}'.format(epoch+1, num_epochs, loss.item()))

# 测试模型
model.eval()  # 将模型设为评估模式,不启用 dropout 和 batch normalization
with torch.no_grad():  # 不计算梯度,加快计算
    predicted = model(x_train)
    print('Predicted: ', predicted)

解释:

  • 使用 nn.Module 定义线性回归模型,并使用 nn.Linear 创建线性层。
  • 使用 nn.MSELoss 定义均方误差损失函数。
  • 使用 torch.optim.SGD 定义随机梯度下降优化器。
  • 在训练过程中,使用循环进行迭代训练,并使用 optimizer.zero_grad() 清零梯度,loss.backward() 进行反向传播,optimizer.step() 更新参数。
  • 在测试过程中,使用 model.eval() 将模型设为评估模式,并使用 torch.no_grad() 不计算梯度,以提高计算效率。

通过这个简单的例子,我们可以了解到如何使用 PyTorch 实现线性回归模型,并进行训练和评估。

PyTorch 线性回归实战:简单示例代码

原文地址: https://www.cveoy.top/t/topic/oHrc 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录