news 2026/6/23 21:20:22

Day37 MLP神经网络的训练

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Day37 MLP神经网络的训练

先搞懂基础准备:PyTorch + CUDA(让训练更快)

MLP 训练通常用PyTorch 框架,如果电脑有 N 卡(NVIDIA 显卡),可以装CUDA让显卡帮着加速计算。

  • 安装:先装对应版本的 CUDA,再装 PyTorch(官网会给匹配的安装命令)。
  • 检查 CUDA:装完后在 Python 里输入import torch; print(torch.cuda.is_available()),输出True就是能用显卡了。
  • 查显卡信息:Windows 的 CMD 里输入nvidia-smi,就能看到显卡型号、CUDA 版本这些。

MLP 训练的核心流程(对应笔记里的 “简单神经网络流程”)

假设我们要训练一个 MLP 做 “分类 / 回归” 任务,步骤是这样的:

1. 数据预处理

得把数据变成模型能认的格式:

  • 归一化:比如把数据缩到 0~1 之间(避免数值太大干扰训练);
  • 转张量:用 PyTorch 的torch.tensor()把数据(比如 Excel 里的表格)转成 “张量”(相当于 PyTorch 里的数组)。
2. 定义 MLP 模型

MLP 是 “多层感知机”,就是一堆 “全连接层” 堆起来。在 PyTorch 里这么写:

  • 继承nn.Module:所有模型都得是这个类的 “子类”;
  • 定义层:比如self.layer1 = nn.Linear(输入特征数, 隐藏层神经元数)(全连接层);
  • 前向传播:定义数据怎么从输入层→隐藏层→输出层,比如x = torch.relu(self.layer1(x))(relu 是激活函数,让模型能学非线性关系)。
3. 选 “损失函数” 和 “优化器”
  • 损失函数:衡量 “模型预测值” 和 “真实值” 的差距(比如分类用CrossEntropyLoss,回归用MSELoss);
  • 优化器:负责 “调整模型参数” 来减小损失(常用Adam,直接调参数就行)。
4. 训练流程(核心!)

就是 “喂数据→算损失→调参数” 循环:

  1. 把数据喂给模型,得到预测结果;
  2. 用损失函数算 “预测值” 和 “真实值” 的损失;
  3. 优化器 “反向传播”:从损失往回算每个参数的 “梯度”(相当于 “参数怎么改能减小损失”);
  4. 优化器更新参数:根据梯度调整模型里的权重、偏置这些参数;
  5. 重复上面步骤,直到损失足够小。
5. 可视化 loss 过程

训练时记录每一轮的损失,用 Matplotlib 画个折线图,能直观看到 “损失是不是越来越小”(如果损失不下降,说明训练有问题)。

举个极简的例子(比如用 MLP 做数字识别):

import torch import torch.nn as nn import torch.optim as optim # 1. 假数据(比如10个样本,每个样本有5个特征,标签是0/1) data = torch.randn(10, 5) # 10个样本,每个5个特征 labels = torch.randint(0, 2, (10,)) # 10个标签(0或1) # 2. 定义MLP模型 class MLP(nn.Module): def __init__(self): super().__init__() self.layer1 = nn.Linear(5, 10) # 输入5特征→隐藏层10神经元 self.layer2 = nn.Linear(10, 2) # 隐藏层10→输出2类(对应0/1) def forward(self, x): x = torch.relu(self.layer1(x)) # 隐藏层加激活 return self.layer2(x) model = MLP() # 3. 损失函数+优化器 loss_fn = nn.CrossEntropyLoss() # 分类任务用的损失 optimizer = optim.Adam(model.parameters(), lr=0.001) # Adam优化器 # 4. 训练(比如训5轮) loss_history = [] # 记录损失 for epoch in range(5): # 喂数据算预测 pred = model(data) # 算损失 loss = loss_fn(pred, labels) # 反向传播+更新参数 optimizer.zero_grad() # 清空之前的梯度 loss.backward() # 算梯度 optimizer.step() # 更新参数 # 记录损失 loss_history.append(loss.item()) print(f"第{epoch+1}轮,损失:{loss.item():.4f}") # 5. 画损失曲线 import matplotlib.pyplot as plt plt.plot(loss_history) plt.xlabel("轮数") plt.ylabel("损失") plt.show()

@浙大疏锦行

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/22 17:22:29

Windows 7系统完美运行Umi-OCR:终极兼容指南

Windows 7系统完美运行Umi-OCR:终极兼容指南 【免费下载链接】Umi-OCR Umi-OCR: 这是一个免费、开源、可批量处理的离线OCR软件,适用于Windows系统,支持截图OCR、批量OCR、二维码识别等功能。 项目地址: https://gitcode.com/GitHub_Trendi…

作者头像 李华
网站建设 2026/6/23 3:25:00

【MAT1001】托马斯微积分期末复习提纲详解

微积分期末复习提纲详解 一、极限(Limit Review) 1. 定义 设函数 f(x)f(x)f(x) 在点 x0x_0x0​ 的某个去心邻域内有定义,如果存在常数 AAA,对于任意给定的正数 ε\varepsilonε,总存在正数 δ\deltaδ,使得…

作者头像 李华
网站建设 2026/6/18 2:19:03

Switch系统优化终极指南:从零基础到精通大气层系统

Switch系统优化终极指南:从零基础到精通大气层系统 【免费下载链接】Atmosphere-stable 大气层整合包系统稳定版 项目地址: https://gitcode.com/gh_mirrors/at/Atmosphere-stable 想要让你的Switch发挥最大潜能吗?大气层系统作为目前最稳定、功能…

作者头像 李华
网站建设 2026/6/23 14:22:15

JVM G1 和 CMS 详解与对比

G1(Garbage-First)和 CMS(Concurrent Mark Sweep)都是 JVM 中针对老年代的垃圾收集器,旨在解决传统 Serial Old、Parallel Old 收集器的STW(Stop-The-World)时间过长问题,适用于高并…

作者头像 李华
网站建设 2026/6/23 5:05:31

实战解析:2PC与Saga分布式事务的完全避坑指南

实战解析:2PC与Saga分布式事务的完全避坑指南 【免费下载链接】school-of-sre linkedin/school-of-sre: 这是一个用于培训软件可靠性工程师(SRE)的在线课程。适合用于需要学习软件可靠性工程和运维技能的场景。特点:内容丰富&…

作者头像 李华
网站建设 2026/6/23 15:16:58

Lumafly模组管理器:重构空洞骑士模组生态的专业解决方案

Lumafly模组管理器:重构空洞骑士模组生态的专业解决方案 【免费下载链接】Lumafly A cross platform mod manager for Hollow Knight written in Avalonia. 项目地址: https://gitcode.com/gh_mirrors/lu/Lumafly 在《空洞骑士》的模组生态中,玩…

作者头像 李华