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()

@浙大疏锦行

相关推荐
墨染天姬3 小时前
【AI】端侧AIBOX可以部署哪些智能体
人工智能
AI成长日志3 小时前
【Agentic RL】1.1 什么是Agentic RL:从传统RL到智能体学习
人工智能·学习·算法
2501_948114243 小时前
2026年大模型API聚合平台技术评测:企业级接入层的治理演进与星链4SAPI架构观察
大数据·人工智能·gpt·架构·claude
小小工匠4 小时前
LLM - awesome-design-md 从 DESIGN.md 到“可对话的设计系统”:用纯文本驱动 AI 生成一致 UI 的新范式
人工智能·ui
黎阳之光4 小时前
黎阳之光:视频孪生领跑者,铸就中国数字科技全球竞争力
大数据·人工智能·算法·安全·数字孪生
小超同学你好4 小时前
面向 LLM 的程序设计 6:Tool Calling 的完整生命周期——从定义、决策、执行到观测回注
人工智能·语言模型
智星云算力4 小时前
本地GPU与租用GPU混合部署:混合算力架构搭建指南
人工智能·架构·gpu算力·智星云·gpu租用
jinanwuhuaguo4 小时前
截止到4月8日,OpenClaw 2026年4月更新深度解读剖析:从“能力回归”到“信任内建”的范式跃迁
android·开发语言·人工智能·深度学习·kotlin
xiaozhazha_4 小时前
效率提升80%:2026年AI CRM与ERP深度集成的架构设计与实现
人工智能
枫叶林FYL4 小时前
【自然语言处理 NLP】7.2.2 安全性评估与Constitutional AI
人工智能·自然语言处理