PyTorch 深度学习实践——线性回归
学习笔记|B 站 UP 主 刘二大人 《PyTorch深度学习实践》视频知识点总结
传送门 PyTorch深度学习实践——线性回归
1. 核心原理回顾
1.1 线性回归模型
线性回归的核心是拟合线性关系: y p r e d = w x + b y_{pred} = wx + b ypred=wx+b,其中:
- w w w(权重)和 b b b(偏置)是模型可学习的参数;
- x x x 为输入特征, y p r e d y_{pred} ypred 为模型预测值。
1.2 损失函数
选择均方误差(MSE) 作为损失函数,衡量预测值与真实值的差距:
L
o
s
s
=
1
n
∑
i
=
1
n
(
y
p
r
e
d
−
y
t
r
u
e
)
2
Loss = \frac{1}{n}\sum_{i=1}^n (y_{pred} - y_{true})^2
Loss=n1i=1∑n(ypred−ytrue)2
损失值越小,代表模型拟合效果越好。
1.3 反向传播与参数更新
- 前向传播:输入数据 → 计算 y p r e d y_{pred} ypred → 计算 Loss;
- 反向传播:以 Loss 为起点,通过链式法则反向推导,计算 Loss 对
w
w
w 和
b
b
b 的梯度:
∂ L o s s ∂ w = 2 n ∑ i = 1 n ( w x i + b − y t r u e ) ∗ x i \frac{\partial Loss}{\partial w} = \frac{2}{n}\sum_{i=1}^n (wx_i + b - y_{true}) * x_i ∂w∂Loss=n2i=1∑n(wxi+b−ytrue)∗xi
∂ L o s s ∂ b = 2 n ∑ i = 1 n ( w x i + b − y t r u e ) \frac{\partial Loss}{\partial b} = \frac{2}{n}\sum_{i=1}^n (wx_i + b - y_{true}) ∂b∂Loss=n2i=1∑n(wxi+b−ytrue) - 参数更新:利用梯度下降优化器,沿梯度反方向调整 w w w 和 b b b,逐步减小 Loss。
2. 完整代码实现
import torch
import torch.nn as nn
import torch.optim as optim
# 1. 生成模拟数据
torch.manual_seed(42) # 固定随机种子,保证结果可复现
x = torch.randn(100, 1) # 输入特征:100个样本,1维特征
y_true = 3 * x + 2 + 0.1 * torch.randn(100, 1) # 真实值:y=3x+2 + 少量噪声
# 2. 定义线性回归模型
class LinearRegression(nn.Module):
def __init__(self):
super().__init__()
self.linear = nn.Linear(1, 1) # 输入维度1,输出维度1
def forward(self, x):
return self.linear(x) # 前向传播逻辑
model = LinearRegression()
# 3. 定义损失函数和优化器
criterion = nn.MSELoss() # 均方误差损失
optimizer = optim.SGD(model.parameters(), lr=0.01) # 随机梯度下降,学习率0.01
# 4. 训练模型
epochs = 1000
for epoch in range(epochs):
# 前向传播
y_pred = model(x)
loss = criterion(y_pred, y_true)
# 反向传播 + 参数更新
optimizer.zero_grad() # 清空上一轮梯度(必须!否则梯度会累加)
loss.backward() # 自动反向传播,计算梯度
optimizer.step() # 更新参数
# 打印训练过程
if (epoch + 1) % 100 == 0:
print(f"Epoch [{epoch+1}/{epochs}], Loss: {loss.item():.4f}")
# 5. 查看训练后的参数
w, b = model.linear.weight.item(), model.linear.bias.item()
print(f"\n训练后参数:w = {w:.4f}, b = {b:.4f}")
2.1 关键函数解析
nn.Linear(1, 1):PyTorch 内置线性层,封装了 w w w 和 b b b 的初始化与前向计算;optimizer.zero_grad():每次迭代前清空梯度,避免梯度累加导致参数更新错误;loss.backward():PyTorch 自动完成反向传播,无需手动计算梯度(核心优势);optimizer.step():根据反向传播得到的梯度,更新模型参数。
2.2 运行结果说明
训练完成后, w w w 会接近 3, b b b 会接近 2(因数据添加了噪声,不会完全相等),Loss 会持续下降至接近 0,说明模型成功拟合了线性关系。
更多推荐
所有评论(0)