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

分类问题与多层感知机

大家好呀,我又来了😊😊😊
源码在这里

文章目录

  • PyTorch学习笔记:多层感知机与MNIST分类实战 🚀
    • 1. `torchvision`库与内置数据集加载 📚
      • 1.1 `torchvision`库介绍
      • 1.2 MNIST数据集加载
      • 1.3 `ToTensor`转换器作用
      • 1.4 `DataLoader`核心功能
      • 1.5 数据形状分析
      • 1.6 数据可视化(代码示例)
    • 2. 多层感知机(MLP)🧠
      • 2.1 核心结构
      • 2.2 核心公式
    • 3. 激活函数 🔥
      • 3.1 ReLU(修正线性单元)
      • 3.2 Sigmoid
      • 3.3 Tanh(双曲正切)
      • 3.4 LeakyReLU
    • 4. 关键知识点总结 📌

PyTorch学习笔记:多层感知机与MNIST分类实战 🚀

1. torchvision库与内置数据集加载 📚

1.1 torchvision库介绍

  • 核心功能:处理图像和视频的PyTorch辅助库
  • 主要组件
    • 常用数据集(MNIST, CIFAR等)
    • 预训练模型(ResNet, VGG等)
    • 图像转换函数
  • 重要类
    • torch.utils.data.Dataset:所有数据集的基础类
    • torch.utils.data.DataLoader:批量加载数据的关键工具
import torchvision
from torchvision.transforms import ToTensor

1.2 MNIST数据集加载

train_ds = torchvision.datasets.MNIST('data/', train=True, transform=ToTensor(),download=True
)
test_ds = torchvision.datasets.MNIST('data/', train=False, transform=ToTensor()
)

参数解析:

  1. 数据存放位置'data/'
  2. 训练/测试集train=True/False
  3. 预处理transform=ToTensor() 🌟
  4. 下载选项download=True

1.3 ToTensor转换器作用

  1. 将输入转换为张量
  2. 规范图片格式为 Channel × Height × Width
  3. 归一化像素值到[0,1]范围

1.4 DataLoader核心功能

train_dl = torch.utils.data.DataLoader(train_ds, batch_size=64, shuffle=True
)
test_dl = torch.utils.data.DataLoader(test_ds, batch_size=64
)

四大功能:

  1. 乱序操作shuffle=True
  2. 批次采样batch_size控制批次大小
  3. 并行加速num_workers指定子进程数
  4. 批处理转换collate_fn实现批次数据转换

1.5 数据形状分析

imgs, labels = next(iter(train_dl))
print(imgs.shape, labels.shape)  # 输出: torch.Size([64, 1, 28, 28]), torch.Size([64])
  • 每批次包含64张图片
  • 图片格式:1通道 × 28高度 × 28宽度
  • 标签格式:64个数字标签

1.6 数据可视化(代码示例)

import matplotlib.pyplot as plt
import numpy as npplt.figure(figsize=(10, 1))
for i, img in enumerate(imgs[:10]):npimg = img.numpy().squeeze()plt.subplot(1, 10, i+1)plt.imshow(npimg, cmap='gray')plt.axis('off')
plt.show()

👉 输出示例:显示10个手写数字图像及其对应标签

print(labels[:10])  # 输出示例: tensor([5, 0, 4, 1, 9, 2, 1, 3, 1, 4])

2. 多层感知机(MLP)🧠

2.1 核心结构

  • 输入层隐藏层输出层
  • 全连接:每层神经元与下一层所有神经元相连
  • 深度:可包含多个隐藏层

2.2 核心公式

输出 = 激活函数(权重 · 输入 + 偏置)


3. 激活函数 🔥

3.1 ReLU(修正线性单元)

input = torch.randn(2)
output = torch.relu(input)
print(input, output)  # 示例: tensor([-0.5, 1.5]) → tensor([0., 1.5])

特点:

  • 计算高效:max(0, x)
  • 缓解梯度消失
  • 稀疏激活:约50%神经元激活

3.2 Sigmoid

output = torch.sigmoid(input)
print(input, output)  # 示例: tensor([0., -2.]) → tensor([0.5000, 0.1192])

特点:

  • 输出范围(0,1)
  • 概率解释
  • 梯度消失问题:两端饱和区梯度接近0

3.3 Tanh(双曲正切)

output = torch.tanh(input)
print(input, output)  # 示例: tensor([0., 1.]) → tensor([0., 0.7616])

特点:

  • 输出范围(-1,1)
  • 零中心化
  • 比sigmoid梯度更强

3.4 LeakyReLU

m = nn.LeakyReLU(0.1)  # 负斜率=0.1
output = m(input)
print(input, output)  # 示例: tensor([-1.0, 0.5]) → tensor([-0.1000, 0.5000])

特点:

  • 解决"死亡ReLU"问题
  • 负值区小梯度
  • 需要手动设置负斜率

4. 关键知识点总结 📌

概念要点应用场景
ToTensor归一化/格式标准化图像预处理
DataLoader批处理/乱序/并行高效数据加载
ReLU计算高效/缓解梯度消失隐藏层首选
Sigmoid概率输出/二分类输出层(二分类)
Tanh零中心化RNN/LSTM
LeakyReLU解决神经元死亡深度网络

💡 经验法则:优先使用ReLU作为隐藏层激活函数,注意学习率设置以避免神经元死亡问题

通过本笔记,已掌握:

  1. 使用torchvision加载和处理MNIST数据集 ✅
  2. 理解DataLoader的核心功能 ✅
  3. 实现多种激活函数并理解其特性 ✅
  4. 构建多层感知机的基础知识 ✅
http://www.dtcms.com/a/276091.html

相关文章:

  • pip国内镜像源一览
  • [es自动化更新] Updatecli编排配置.yaml | dockerfilePath值文件.yml
  • springboot+swagger2文档从swagger-bootstrap-ui更换为knife4j及文档接口参数不显示问题
  • 【高等数学】第三章 微分中值定理与导数的应用——第七节 曲率
  • DirectX Repair修复工具下载,.NET修复,DirectX修复
  • python 中 ‘5‘ 和 5 有什么本质区别?
  • 【深度学习】 1 Deep Learning
  • 12. JVM的垃圾回收器
  • LangChain 代理(Agents)学习
  • 网页五子棋-对战
  • python学习打卡:DAY 37 早停策略和模型权重的保存
  • web网站无法抓包排查;burp无法抓包情况
  • comfyUI-controlNet-线稿软边缘
  • c++中的STL
  • Day59
  • 智能制造——解读50页智能工厂系统集成总体解决方案【附全文阅读】
  • python学习打卡:DAY 40 训练和测试的规范写法
  • 深入详解:决策树在医学影像领域心脏疾病诊断的应用及实现细节
  • 苦练Python第9天:if-else分支九剑
  • 影刀rpa初级选择题答案-02网页自动化-源码-初级证书
  • 6. JVM直接内存
  • 菜鸟的C#学习(二)
  • 动手开发 MCP Server (Datawhale AI夏令营)
  • TensorBoard
  • 全栈开发知识
  • 计算机毕业设计springboot阳阳助农电商平台 基于Spring Boot的阳阳助农电商平台设计与开发 Spring Boot框架下的阳阳助农电商平台构建
  • 苦练Python第7天:布尔七日斩
  • 模拟电路--供复习和嵌入式学习
  • 威联通docker容器安装宝塔面板
  • VUE3 el-table 主子表 显示