深度学习流程
原文链接:https://blog.youkuaiyun.com/Deadwalk/article/details/139649117?spm=1001.2014.3001.5502
1. 深度学习基本流程
1.1 流程图
- 由于训练的本质就是求loss函数的最小值;所以,我们类比求 y = 2 x 2 y = 2x^2 y=2x2 最小值的过程,来看一下线性回归训练(也就是求loss最小值)的过程,其流程如下:
1.2 代码实现
import torch
import torch.nn as nn
import torch.optim as optim
# 生成模拟数据
torch.manual_seed(42)
x_train = torch.randn(100, 13) # 100个样本,每个样本有13个特征
y_train = torch.randn(100, 1) # 每个样本对应一个输出值
# 定义模型
model = nn.Linear(13, 1) # 输入特征数为13,输出特征数为1
# 初始化优化器
criterion = nn.MSELoss() # 均方误差损失
optimizer = optim.SGD(model.parameters(), lr=0.01) # 随机梯度下降优化器
# 迭代次数和学习率
epochs = 1000
learning_rate = 1e-2
# 使用 PyTorch 进行梯度下降
for _ in range(epochs):
optimizer.zero_grad() # 梯度清零
outputs = model(x_train) # 正向传播
loss = criterion(outputs, y_train) # 计算损失
loss.backward() # 反向传播
optimizer.step() # 更新参数
# 输出最终模型参数
print("线性回归模型的权重:", model.weight)
print("线性回归模型的偏置:", model.bias)
1.3 基本概念
- 模型 model
- 前向传播:把特征 X 带入模型 model ,得到预测结果 y_pred
- 训练时:自动在底层构建计算图(把正向传播的流程记录下来,方便进行后续的分布求导/链式求导
- 例如:在导数中,对于一个复合函数 h ( g ( f ( x ) ) ) h( g( f(x))) h(g(f(x))) ,我们需要进行链式求导,即 h ( g ( f ( x ) ) ) = f ′ ∗ g ′ ∗ h ′ h( g( f(x))) = f' * g' * h' h(g(f(x)))=f′∗g′∗h′
- 反向传播:本质是计算每个参数的梯度,是通过损失函数发起的
- 模型的作用:只负责前向传播 forward,不负责后向传播 backward
- 前向传播:把特征 X 带入模型 model ,得到预测结果 y_pred
- 训练流程
- 从训练集中,取一批 batch 样本 (x, y)
- 把样本特征 X 送入模型 model,得到预测结果 y_pred
- 计算损失函数 loss = f(y_pred, y),计算当前的误差 loss
- 通过 loss , 反向传播,计算每个参数 (w, b) 的梯度
- 利用优化器 optimizer ,通过梯度下降法,更新参数
- 利用优化器 optimizer 清空参数的梯度
- 重复1-6 直至迭代结束(各项指标满足