当前位置: 首页 > news >正文

【机器学习深度学习】典型的模型训练过程

目录

一、模型训练直观图

二、核心目标 

三、训练过程详解

3.1 训练阶段

1、准备起点:输入数据 + 初始参数权重

2、模型尝试预测:变换计算 (前向传播)

3、检查错误:计算损失值

4、学习的关键:反向传播 + 梯度下降法 (调整权重)

5、循环迭代:模型训练迭代过程

6、停止条件:损失值达标

3.2 训练完成

7、模型测试

8、模型应用

四、图解流程总结 

4.1 流程图说明

4.2 关键特点

4.3 关键点记住

五、训练模型代码示例

5.1 执行代码

5.2 运行结果

5.3 图示结果

5.4 关键点对应关系


一、模型训练直观图


二、核心目标 

让模型学会从“输入数据”准确预测“输出结果”。


三、训练过程详解

3.1 训练阶段

1、准备起点:输入数据 + 初始参数权重
  • 输入数据: 这是模型学习的“教材”。例如:一堆猫和狗的图片(特征:像素值、颜色等)。

  • 参数权重: 模型内部的“调节旋钮”。训练开始时,这些权重是随机初始化的(就像给模型一个随机的猜测起点)。这些权重决定了输入数据如何被组合、转换。

2、模型尝试预测:变换计算 (前向传播)
  • 模型使用当前的权重参数,对输入的一批数据进行计算。

  • 这个计算过程(可能是复杂的数学公式或神经网络层)将输入数据“变换”成一个预测输出

  • 例子: 模型看到一张图片(输入),经过当前权重计算后,输出一个预测:“这张图有70%概率是猫,30%概率是狗”。

3、检查错误:计算损失值
  • 真实标签: 每个输入数据对应的正确答案(Ground Truth)。例子: 刚才那张图其实是一只猫(标签是“猫”)。

  • 损失值: 一个衡量预测输出真实标签之间差距(错误程度)的数值。常见的损失函数如均方误差(回归)、交叉熵(分类)。

  • 例子: 模型预测“猫70%,狗30%”,真实是“猫100%”。损失函数会计算出一个值(比如0.36),表示这个预测的“错误成本”。目标就是让这个损失值尽可能小!

4、学习的关键:反向传播 + 梯度下降法 (调整权重)
  • 反向传播: 这是模型“反思错误”的过程。算法会从输出层向输入层反向计算,精确地找出每一个权重参数对最终的损失值应该负多大责任。它计算的是损失值相对于每个权重的梯度

  • 梯度下降法: 利用计算出的梯度信息来更新权重参数

    • 梯度: 指向损失值增加最快的方向。

    • 下降: 我们要让损失值减小,所以更新权重时,要沿着梯度的反方向移动一小步。

    • 学习率: 一个超参数,控制每次更新权重时移动的“步长”有多大。太小学习慢,太大可能跳过最优解。

  • 核心动作: 新权重 = 旧权重 - 学习率 * 梯度

  • 结果: 经过这次更新,模型在下一次遇到类似输入时,预测结果应该更接近真实标签(损失值应该更小)。

5、循环迭代:模型训练迭代过程
  • 步骤 2 -> 3 -> 4 会在一批又一批的数据上反复进行

  • 每一次完整的循环(遍历完所有训练数据一次)称为一个 Epoch

  • 在一个 Epoch 中,数据通常被分成更小的批次(Batch) 进行训练(步骤2-4在Batch上进行)。

  • 随着迭代的进行,模型的权重参数被不断调整优化,损失值总体趋势是逐渐下降的。

6、停止条件:损失值达标
  • 训练不会无限进行下去。停止条件通常包括:

    • 损失值降低到某个可接受的阈值以下。

    • 损失值在连续几个 Epoch 内不再显著下降(收敛)。

    • 达到预设的最大 Epoch 数。

  • 此时,我们认为模型在训练数据上已经“学得差不多了”,权重参数基本稳定。


3.2 训练完成

7、模型测试
  • 使用训练阶段从未见过的新数据(测试集)来评估训练好的模型的真实泛化能力

  • 计算模型在测试集上的损失值或准确率等指标。这才是模型性能的真实反映,避免模型只是“死记硬背”了训练数据(过拟合)。

8、模型应用
  • 当模型通过测试,性能满足要求后,就可以投入实际使用。

  • 输入新的、未知的数据,模型利用训练好的权重参数进行计算,输出预测结果。


四、图解流程总结 

4.1 流程图说明


1、训练初始化

  • 输入数据(特征)

  • 随机初始化权重参数

2、前向传播(Forward Propagation)

  • 数据通过模型计算

  • 生成预测输出

# 伪代码示例
predictions = model(input_data, weights)

3、损失计算

  • 比较预测输出与真实标签

  • 计算损失值(如均方误差、交叉熵等)

loss = loss_function(predictions, true_labels)

4、停止条件判断

  • 检查损失是否达标(足够小)

  • 或达到最大迭代次数

5、反向传播(Backpropagation)

  • 计算损失对每个权重的梯度

  • 确定权重调整方向和幅度

gradients = calculate_gradients(loss, weights)

6、权重更新

  • 使用梯度下降法更新权重

  • 学习率控制更新步长

weights = weights - learning_rate * gradients

7、迭代循环

  • 重复前向传播→损失计算→反向传播→权重更新

  • 直到损失达标

8、模型部署

  • 使用测试集评估模型性能

  • 部署模型进行实际预测


4.2 关键特点

  1. 循环结构:核心训练过程形成闭环,持续迭代优化

  2. 双向箭头:前向传播(数据流动)与反向传播(梯度流动)方向相反

  3. 停止条件:当损失足够小时跳出循环

  4. 分离阶段:训练/测试/应用三个阶段清晰区分

这个流程图展示了机器学习"通过数据自动调整参数"的本质:模型通过反复试错(前向计算),评估错误(损失计算),然后修正错误(反向传播更新权重),最终获得预测能力。

4.3 关键点记住

  • 前向传播: 输入 -> 权重计算 -> 输出预测。

  • 损失函数: 量化预测与真实的差距。

  • 反向传播: 找出每个权重对损失应负的责任(计算梯度)。

  • 梯度下降: 沿着减少损失的方向更新权重(梯度反方向)。

  • 迭代: 反复进行前向、计算损失、反向传播、更新权重。

  • 测试与应用分离: 训练好的模型必须用新数据测试和应用,确保学到的知识是通用的。

这个过程就像教一个学生:给他题目(输入)和初始思路(权重),他尝试解题(预测),老师批改对错(计算损失),分析错误原因(反向传播),学生根据反馈修正思路(梯度下降更新权重),不断练习(迭代),直到考试合格(损失达标),然后参加真正的考试(模型测试)并最终工作(模型应用)。


五、训练模型代码示例

5.1 执行代码

这个示例完整展示了机器学习模型训练的整个生命周期,从数据准备到模型应用,每一步都有清晰的代码实现和可视化展示。

import torch
import torch.nn as nn
import matplotlib.pyplot as plt
import numpy as np# ==== 解决中文显示问题 ====
plt.rcParams['font.sans-serif'] = ['SimHei']  # 使用黑体
plt.rcParams['axes.unicode_minus'] = False    # 显示负号# =====================
# 1. 准备数据(输入数据 + 真实标签)
# =====================
# 创建 y = 2x + 1 的线性数据,加入随机噪声
np.random.seed(42)
x = np.linspace(0, 5, 100)
y = 2 * x + 1 + np.random.normal(0, 0.5, 100)# 转换为PyTorch张量
inputs = torch.tensor(x, dtype=torch.float32).unsqueeze(1)
labels = torch.tensor(y, dtype=torch.float32).unsqueeze(1)# =====================
# 2. 初始化模型参数(权重和偏置)
# =====================
class LinearRegression(nn.Module):def __init__(self):super().__init__()# 随机初始化权重参数 (类似 y = wx + b)self.weights = nn.Parameter(torch.randn(1))self.bias = nn.Parameter(torch.randn(1))def forward(self, x):# 前向传播计算:变换计算return self.weights * x + self.biasmodel = LinearRegression()
print(f"初始参数: w={model.weights.item():.3f}, b={model.bias.item():.3f}")# =====================
# 3. 设置训练参数
# =====================
learning_rate = 0.01  # 学习率
epochs = 100          # 训练轮数
loss_function = nn.MSELoss()  # 均方误差损失函数
optimizer = torch.optim.SGD(model.parameters(), lr=learning_rate)  # 梯度下降优化器# 记录训练过程
loss_history = []# =====================
# 4. 训练迭代过程
# =====================
for epoch in range(epochs):# 前向传播:计算预测输出predictions = model(inputs)# 计算损失值loss = loss_function(predictions, labels)loss_history.append(loss.item())# 反向传播:计算梯度loss.backward()# 梯度下降法:调整权重optimizer.step()# 清空梯度optimizer.zero_grad()# 每10轮打印进度if (epoch+1) % 10 == 0:print(f'Epoch [{epoch+1}/{epochs}], Loss: {loss.item():.4f}')# =====================
# 5. 检查训练结果
# =====================
print(f"\n训练后参数: w={model.weights.item():.3f}, b={model.bias.item():.3f}")
print(f"真实参数: w=2.0, b=1.0")# 可视化训练过程
plt.figure(figsize=(12, 4))# 损失曲线
plt.subplot(1, 2, 1)
plt.plot(loss_history)
plt.title('训练损失变化')
plt.xlabel('迭代次数')
plt.ylabel('损失值')
plt.grid(True)# 拟合结果
plt.subplot(1, 2, 2)
plt.scatter(x, y, label='原始数据', alpha=0.6)
plt.plot(x, model(inputs).detach().numpy(), 'r-', lw=2, label='拟合直线')
plt.title('线性回归拟合结果')
plt.legend()
plt.grid(True)plt.tight_layout()
plt.show()# =====================
# 6. 模型测试与应用
# =====================
# 测试新数据
test_x = torch.tensor([1.5, 3.5, 4.8], dtype=torch.float32).unsqueeze(1)
predictions = model(test_x)print("\n模型测试:")
for i in range(len(test_x)):true_y = 2 * test_x[i].item() + 1pred_y = predictions[i].item()print(f"输入 x={test_x[i].item():.1f}, 预测值={pred_y:.2f}, 真实值={true_y:.2f}")

5.2 运行结果

输出效果

初始参数: w=-0.205, b=0.783
Epoch [10/100], Loss: 1.3883
Epoch [20/100], Loss: 0.2775
Epoch [30/100], Loss: 0.2533
Epoch [40/100], Loss: 0.2485
Epoch [50/100], Loss: 0.2445
Epoch [60/100], Loss: 0.2409
Epoch [70/100], Loss: 0.2376
Epoch [80/100], Loss: 0.2346
Epoch [90/100], Loss: 0.2318
Epoch [100/100], Loss: 0.2293

训练后参数: w=1.917, b=1.229
真实参数: w=2.0, b=1.0

模型测试:
输入 x=1.5, 预测值=4.10, 真实值=4.00
输入 x=3.5, 预测值=7.94, 真实值=8.00
输入 x=4.8, 预测值=10.43, 真实值=10.60

5.3 图示结果


 

5.4 关键点对应关系

代码部分流程图步骤
model(inputs)变换计算(前向传播)
loss_function()计算损失值
loss.backward()反向传播(计算梯度)
optimizer.step()梯度下降(更新权重)
训练循环模型训练迭代过程
损失值监测损失值达标判断
新数据预测模型测试与应用

相关文章:

  • 免费软件安装网站网站 软件
  • 建设网站可选择的方案有北京百度推广代运营
  • 西宁市网站建设公司南京seo排名公司
  • java做网站开发成本高怎样查询百度收录和排名情况
  • 电气网站设计图片外链
  • 盘锦网站制作公司seo教学视频教程
  • 【深度学习新浪潮】什么是上下文工程?
  • (LeetCode 面试经典 150 题) 151. 反转字符串中的单词(栈+字符串)
  • 建筑供配电系统识图一防雷接地系统
  • <六> k8s + promtail + loki + grafana初探
  • 用wordpress建日语外贸网站的优势
  • SpringBoot 的 jar 包为什么可以直接运行?
  • 【笔记——李沐动手学深度学习】2.3 线性代数
  • 221. 最大正方形
  • webpack5 css-loader 配置项中的modules
  • 物流涂层科技赋能仓储:创冷科技引领高温环境下的仓储物流安全升级
  • iClone 中创建的面部动画导入 Daz 3D
  • 鸿蒙应用开发中的数据存储:SQLite与Preferences全面解析
  • RabbitMq中使用自定义的线程池
  • 商务年度总结汇报PPT模版分享
  • 银河麒麟高级服务器操作系统(全架构)OpenGauss 数据库部署手册
  • 从零开始的云计算生活——第二十三天,稍作休息,Tomcat
  • Docker快速入门上手教程(保姆式),含docker所有常用命令大全(详细)!
  • Go 语言并发模式实践
  • 【Pandas】pandas DataFrame asof
  • 大语言模型的通用局限性与全球技术演进