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

目录

一、模型训练直观图

二、核心目标 

三、训练过程详解

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()梯度下降(更新权重)
训练循环模型训练迭代过程
损失值监测损失值达标判断
新数据预测模型测试与应用

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/88415.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/88415.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Mysql8.0版本未卸载干净如何重新下载

Mysql8.0版本未卸载干净如何重新下载 安装前准备 清理现有安装(确保干净环境) :: 停止并卸载现有MySQL服务 net stop MySQL >nul 2>&1 sc delete MySQL >nul 2>&1:: 删除旧数据目录 rd /s /q "C:\ProgramData\MySQL" &…

垃圾收集器G1ZGC详解

G1收集器(-XX:UseG1GC) G1 把堆划分为许多大小相同的 Region(默认 1~32 MB,一个堆通常包含上千个 Region,JVM目标是不超过2048个Region(JVM源码里TARGET_REGION_NUMBER 定义)) 不再是传统的 Eden、Survivor、Old 静态分代模型&…

Bootstrap 5学习教程,从入门到精通,Bootstrap 5 弹出框(Popovers) 语法知识点及案例(22)

Bootstrap 5 弹出框(Popovers) 语法知识点及案例 一、弹出框基本概念 弹出框(Popovers)是Bootstrap提供的一个小型覆盖层组件,用于显示额外的信息,当用户点击某个元素时出现,再次点击时消失。 二、弹出框基本语法知识点 1. 必需属性 dat…

轻巧灵动,智启未来 ——Kinova Gen3 Lite 机器人轻松解锁各行业自动化新姿势

近年来,Kinova Gen3 Lite 机器人凭借其卓越的性能、灵活的应用能力以及出色的性价比,在全球范围内掀起了一股热销狂潮。无论是科研机构、高校实验室,还是工业制造企业,都对它青睐有加。其销量持续攀升,市场占有率不断扩…

STM32 实现PID

&#x1f9f1; 一、PID核心模块&#xff08;模块化设计&#xff09; 头文件 pid_controller.h #pragma once #include <stdint.h>typedef struct {// 可调参数float Kp, Ki, Kd; // PID系数float output_min; // 输出下限float output_max; // 输出上…

基于MATLAB的BP神经网络回归模型在空气质量预测中的应用

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档&#xff09;&#xff0c;如需数据代码文档可以直接到文章最后关注获取。 1.项目背景 随着城市化进程的加快和工业化的不断发展&#xff0c;空气质量问题日益受到广泛关注。空气中污染物如PM2.5、PM10、…

Linux docker拉取镜像报错解决

1、错误提示&#xff1a; Error response from daemon: Get "https://registry-1.docker.io/v2/": net/http: request canceled while waiting for connection 主要原因就是docker源不正确&#xff0c;需要配置一下。 2、报错如下&#xff1a; 3、解决办法&#x…

stm32week17+18+19+20

stm32学习 十二.串口 5.USART的HAL库用法 USART/UART异步通信配置步骤&#xff1a; 配置串口工作参数&#xff1a;HAL_UART_Init();串口底层初始化&#xff1a;HAL_UART_MspInit();开启串口异步接收中断&#xff1a;HAL_UART_Receive_IT();设置优先级&#xff0c;使能中断&…

14.Linux Docker

## Linux系统优化一般情况&#xff0c;我们都会使用Linux来进行MySQL的安装和部署&#xff0c;Linux系统在使用的时候&#xff0c;也需要进行相关的配置&#xff0c;以提高MySQL的使用性能&#xff0c;这里列举以下几点&#xff1a;避免使用Swap交换分区&#xff0c;因为交换时…

智能体平台的商业前景与竞争格局分析:金融与企业市场的机遇与挑战

一、金融机构与企业部署第三方智能体平台&#xff0c;这条路靠谱吗&#xff1f; 1. 需求背景 金融机构和大中小企业普遍面临数字化转型、降本增效、智能服务升级等需求。智能体&#xff08;Agent/AI Agent&#xff09;平台能帮助企业快速构建客服、风控、营销、数据分析等多种…

数据结构篇-二分图

定义示例应用 定义 一个图是二分图&#xff1b;一个图具有二着色性&#xff1b;一个图不包含任何奇数长度的环&#xff1b; 实现 /*** Program 18.6 Two-colorability* ------------------------------------------------------------------------------------------------…

50. Pow(x, n)快速幂算法

实现 pow(x, n) &#xff0c;即计算 x 的整数 n 次幂函数&#xff08;即&#xff0c;xn &#xff09;。此函数应将 x 作为浮点数&#xff08;意味着它可以是十进制数&#xff09;和 n 作为整数&#xff08;可以是正数、负数或零&#xff09;一起使用。 快速幂&#xff08;Expo…

打造丝滑的Android应用:LiveData完全教程

为什么你需要LiveData&#xff1f; 在Android开发中&#xff0c;数据的动态更新一直是个让人头疼的问题。想象一下&#xff1a;你的界面需要实时显示用户的余额变化&#xff0c;或者一个聊天应用的未读消息数得随时刷新。过去&#xff0c;我们可能会用Handler、手动监听器&…

vue3 el-table 根据字段值 改变整行字体颜色

在 Vue 3 中使用 Element Plus 的 el-table 组件时&#xff0c;如果你想根据某一列的字段值来改变整行的字体颜色&#xff0c;你可以通过使用自定义的 row-class-name 属性或者通过插槽&#xff08;slot&#xff09;的方式来达到目的。以下是两种常见的方法&#xff1a; 方法一…

Linux的全新网络管理命令行工具——nmcli

一、nmcli简介 1.1、NetworkManager简介 1.1.1、NetworkManager介绍 在红帽系的Linux中&#xff0c;默认的网络服务是由NetworkManager提供的&#xff08;其主要是一个可以进行动态网络配置和控制的守护进程&#xff09;。 使用NetworkManager的优点 序号使用NetworkManager的优…

C++基础之智能指针

一、概念 堆内存对象需要手动使用delete销毁&#xff0c;如果没有使用delete销毁就会造成内存泄漏。 所以C在ISO98标准中引入了智能指针的概念&#xff0c;并在ISO11中趋于完善。 使用智能指针可以让堆内存对象具有栈内存对象的特点&#xff0c;原理是给需要手动回收的内内存对…

python3虚拟机线程切换过程

python实现了自己的多线程&#xff0c;为了保证线程安全&#xff0c;引入了全局解释器锁GIL&#xff0c;只有拿到GIL的线程才能执行&#xff0c;所以在python中同一时刻只能有一个线程在运行&#xff0c;python多线程无法发挥多核处理器的威力&#xff0c;《python源码剖析》中…

PYTHON从入门到实践5-列表操作

# 【1】列表是可变的&#xff0c;可以修改、追加、删除 import randomclass Friend(object):def __init__(self, name, age):self.name nameself.age ageif __name__ __main__:friendList []for i in range(0, 9):randomNumber random.randint(0, 100)friend Friend(f&qu…

【linux】network服务启动网卡流程

目录 1、介绍2、ifup流程【1】与NetworkManager兼容【2】ifup-eth设置ip【3】ifup-routes设置路由 1、介绍 network服务的核心由/etc/sysconfig/network-scripts/下一堆脚本配置来生效&#xff0c;其中启动网卡就是通过ifup脚本来实现的&#xff0c;下面就讲一下ifup如何恢复i…

如何防止自己的电脑被控制?开启二次验证保护教程

远程操作什么最重要&#xff1f;安全&#xff0c;安全&#xff0c;和安全&#xff01;答案永远是安全&#xff01;那么究竟如何能让远程连接安全性更上一层台阶呐&#xff1f;又是哪家远控安全策略方面最给力呐&#xff1f;这可不是王婆卖瓜&#xff0c;自卖自夸&#xff0c;确…