type
status
date
slug
summary
tags
category
icon
password

实验说明

实验目的

掌握 BP 神经网络的基本原理和基本的设计步骤 ;
了解 BP 算法中各参数的作用和意义 。

实验数据

CIFAR-10 数据集,此数据集中有60000张彩色图片,包括 50000 张训练图片和 10000 张测试图片,可将训练样本划分为 49000 张样本的训练集和 1000 张样本的验证集,测试集可只取 1000 张测试样本。其中每个样本都是 32 ×32 像素的 RGB 彩色图片,具有三个通道,每个像素点包括 RGB 三个数值,数值范围 0~255,所有照片分属 10 个不同的类别:飞机( airplane )、汽车( automobile )、鸟类( bird )、猫( cat )、鹿( deer )、狗( dog )、蛙类( frog )、马( horse )、船( ship )和卡车( truck )。

实验说明

不能使用 pytorch 等框架,也不能使用库函数,所有算法都要自己实现;
notion image
整个神经网络包括 3 层——输入层,隐藏层,输出层。
输入层有 32*32*3 个神经元, 隐藏层有 1024 个神经元,输出层有 10 个神经元(对应 10 个类别)。训练 10 个 epoch。
注意事项:三层网络模型较为简单,模型准确率不需要很高,保证正确实现神经网络的搭建和训练即可。
其他提示:
  1. 建议使用批处理和矩阵运算代替 for 循环,可以提高效率。
  1. RGB 图像的维度是:3(通道数)×32(长)×32(宽),可以根据自己的需求选择平均通道值还是最大最小通道值。
  1. 输出层需要加入激活函数
 

实验步骤及内容

基本实验内容

实验内容:用神经网络对给定的数据集进行分类,画出 loss 图,给出在测试集上的精确度
BP(Back Propagation)神经网络是一种多层前馈神经网络,通过误差反向传播算法进行训练。本实验实现的三层BP神经网络结构如下:
  • 输入层:3072个神经元(32×32×3 RGB图像)
  • 隐藏层:1024个神经元,使用Sigmoid激活函数
  • 输出层:10个神经元(对应10个类别),使用Softmax输出概率分布
前向传播:数据从输入层经过隐藏层到输出层的计算过程
反向传播:误差从输出层反向传播到隐藏层,用于更新权重参数
损失函数:交叉熵损失函数,用于衡量预测结果与真实标签的差异
优化算法:随机梯度下降(SGD)用于更新网络参数
  1. 首先加载数据集
    1. 对数据进行预处理
      1. RGB 图像的维度是:3(通道数)×32(长)×32(宽),此处我采用通道级极差归一化方法,相较于常规的全局归一化,该方法能更好地保留RGB通道间的差异性特征
    1. 分割训练集,按照题目要求训练样本划分为训练集与测试集,比例为98:2
      1. 实现网络
        1. 层结构
          • 输入层 → 全连接层(3072→1024) + Sigmoid激活
          • 隐藏层 → 全连接层(1024→10)
          • 输出层 → Softmax
          notion image
          现在需要实现网络中的各层
          • Affine层:实现全连接计算 
          • Sigmoid层:实现非线性激活 
          • SoftmaxWithLoss层:实现Softmax归一化和交叉熵损失计算
          具体各层实现如下:
          网络实现
          优化器选择的是随机梯度下降算法:
          训练过程
          • 训练轮数(epoch):10
          • 优化器:随机梯度下降(SGD)
          • 学习率:0.01
          • 批处理:使用矩阵运算提高效率
       

      思维发散

      改进后的网络结构
      1. 输入层(32×32×3)
      1. 卷积层(3×3卷积核,16个通道) + ReLU激活
      1. 最大池化层(2×2)
      1. 卷积层(3×3卷积核,32个通道) + ReLU激活
      1. 最大池化层(2×2)
      1. 展平层
      1. 全连接层(→512) + ReLU
      1. 输出层(→10) + Softmax
      首先我尝试了不调用库函数,自己实现上面的算法
      首先,除了前面提到的几层,还需要补充实现如下内容(卷积层、最大池化层等)
      之后,我们实现网络:
      运行结果如下:
      notion image
      notion image
       
       
       
       
      尝试使用Pytorch的实现如下:
      notion image
      Epoch 1/10 Train Loss: 1.8146 | Train Acc: 33.72% Val Loss: 1.4799 | Val Acc: 47.30%
      ……
      Epoch 9/10 Train Loss: 0.4853 | Train Acc: 83.26% Val Loss: 0.9655 | Val Acc: 68.55%
      Epoch 10/10 Train Loss: 0.3853 | Train Acc: 86.75% Val Loss: 1.0852 | Val Acc: 67.22%
       

      实验结果与分析

      参数设置:lr=0.01, epoches=20, batch_size=64 结果:
      notion image
      notion image
      从loss训曲线可以看出,训练初期loss下降较快,说明网络快速学习到基本特征;随着训练进行,loss下降趋缓,表明网络进入更精细的参数调整阶段;最终loss基本稳定。
      但由于网络结构较为简单(仅3层),准确率不会很高,与更复杂的网络(如CNN)相比,BP神经网络在图像分类任务上表现有限。
       
       
       
      解除网页文本禁止复制粘贴限制基于决策树算法完成鸢尾花品种预测任务
      Loading...
      Rainnn
      Rainnn
      bling bling ⭐
      Latest posts
      神经网络学习
      2025-5-16
      基于决策树算法完成鸢尾花品种预测任务
      2025-5-16
      Linux Notes
      2025-5-12
      springboot+nginx 图片上传并回显
      2025-4-25
      PyCharm远程开发实战:本地代码实时同步Docker容器方案
      2025-4-24
      解除网页文本禁止复制粘贴限制
      2025-4-22
      Announcement
      wakuwaku!
      你竟然发现了这里!!
      创作不易,获取加🔒文章密码/试读文章,请微信关注公众号 Code & Cookies
      notion image