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 等框架,也不能使用库函数,所有算法都要自己实现;

整个神经网络包括 3 层——输入层,隐藏层,输出层。
输入层有 32*32*3 个神经元, 隐藏层有 1024 个神经元,输出层有 10 个神经元(对应 10 个类别)。训练 10 个 epoch。
注意事项:三层网络模型较为简单,模型准确率不需要很高,保证正确实现神经网络的搭建和训练即可。
其他提示:
- 建议使用批处理和矩阵运算代替 for 循环,可以提高效率。
- RGB 图像的维度是:3(通道数)×32(长)×32(宽),可以根据自己的需求选择平均通道值还是最大最小通道值。
- 输出层需要加入激活函数
实验步骤及内容
基本实验内容
实验内容:用神经网络对给定的数据集进行分类,画出 loss 图,给出在测试集上的精确度
BP(Back Propagation)神经网络是一种多层前馈神经网络,通过误差反向传播算法进行训练。本实验实现的三层BP神经网络结构如下:
- 输入层:3072个神经元(32×32×3 RGB图像)
- 隐藏层:1024个神经元,使用Sigmoid激活函数
- 输出层:10个神经元(对应10个类别),使用Softmax输出概率分布
前向传播:数据从输入层经过隐藏层到输出层的计算过程
反向传播:误差从输出层反向传播到隐藏层,用于更新权重参数
损失函数:交叉熵损失函数,用于衡量预测结果与真实标签的差异
优化算法:随机梯度下降(SGD)用于更新网络参数
- 首先加载数据集
- 对数据进行预处理
RGB 图像的维度是:3(通道数)×32(长)×32(宽),此处我采用通道级极差归一化方法,相较于常规的全局归一化,该方法能更好地保留RGB通道间的差异性特征
- 分割训练集,按照题目要求训练样本划分为训练集与测试集,比例为98:2
- 实现网络
- 输入层 → 全连接层(3072→1024) + Sigmoid激活
- 隐藏层 → 全连接层(1024→10)
- 输出层 → Softmax
- Affine层:实现全连接计算
- Sigmoid层:实现非线性激活
- SoftmaxWithLoss层:实现Softmax归一化和交叉熵损失计算
- 训练轮数(epoch):10
- 优化器:随机梯度下降(SGD)
- 学习率:0.01
- 批处理:使用矩阵运算提高效率
层结构

现在需要实现网络中的各层
具体各层实现如下:
网络实现:
优化器选择的是随机梯度下降算法:
训练过程
思维发散
改进后的网络结构:
- 输入层(32×32×3)
- 卷积层(3×3卷积核,16个通道) + ReLU激活
- 最大池化层(2×2)
- 卷积层(3×3卷积核,32个通道) + ReLU激活
- 最大池化层(2×2)
- 展平层
- 全连接层(→512) + ReLU
- 输出层(→10) + Softmax
首先我尝试了不调用库函数,自己实现上面的算法
首先,除了前面提到的几层,还需要补充实现如下内容(卷积层、最大池化层等)
之后,我们实现网络:
运行结果如下:


尝试使用Pytorch的实现如下:

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
结果:


从loss训曲线可以看出,训练初期loss下降较快,说明网络快速学习到基本特征;随着训练进行,loss下降趋缓,表明网络进入更精细的参数调整阶段;最终loss基本稳定。
但由于网络结构较为简单(仅3层),准确率不会很高,与更复杂的网络(如CNN)相比,BP神经网络在图像分类任务上表现有限。
- Author:Rainnn
- URL:https://blog.rainnn.top//article/1f4eefba-b209-80c9-b32f-d0b363c8ab31
- Copyright:All articles in this blog, except for special statements, adopt BY-NC-SA agreement. Please indicate the source!