PyTorch 线性回归实战:简单示例代码
本文将介绍如何使用 PyTorch 实现一个简单的线性回归模型。线性回归是一种监督学习方法,通过最小二乘法可以求出其方程。
步骤:
- 定义训练集: 首先,我们定义一个简单的训练集,其中 x 和 y 的值成正比。
- 定义线性回归模型: 使用 PyTorch 中的
nn.Linear类定义一个线性模型,其输入和输出的维度都为 1。 - 定义损失函数和优化器: 选择均方误差作为损失函数,并使用随机梯度下降作为优化器。
- 训练模型: 通过前向传播计算输出、计算损失、反向传播和更新参数来训练模型。
- 测试模型: 使用训练好的模型对训练集进行测试,并输出预测结果。
代码示例:
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 实现线性回归模型,并进行训练和评估。
原文地址: https://www.cveoy.top/t/topic/oHrc 著作权归作者所有。请勿转载和采集!