本系列是北航计算机学院于 2024 年春季学期开设的一般专业课《FPGA多核并行计算》课程的实验报告记录,由于学习过程中掌握并不牢靠,如有错误请读者不吝赐教!

深度学习基础

代码及相关数据文件上传在 Github 仓库中。

实验分析

使用卷积神经网络进行图像识别

任务说明:使用 PyTorch 搭建一个简单的卷积神经网络模型,并实现对手写数字的识别。

首先在 MNIST Dataset 中下载 MNIST 数据集,该数据集包含总计 70000 张手写数字的图片,其中划分为 60000 张训练图片以及 10000 张测试图片,每张样本图片都是一个 28x28 像素的灰度图像。

然后使用实验材料中提供的代码构建一个处理这些图像的卷积神经网络,最终的全连接层将全局最大池化层的输出的 64 个特征连接到一个有 10 个输出节点的全连接层,对应于 10 个分类标签(即数字 0~9 )。

实验过程和实验结果见 mnist.pynb

使用yolov3进行图片中的目标检测

任务说明:使用 yolov3 和已经训练好的权重模型对图片中的物体进行目标检测。

本实验环境为 wsl 环境 Ubuntu 20.04.6。Windows 平台的 darknet 框架与 yolov3 编译部署参考这篇文章

img

img

预测结果如下,可见yolov3能对图像中物体进行有效识别:

img

实验思考

  • 如何通过设置单层感知机的 w 和 T 实现 ANDORNOT

单层感知机通过将输入向量与权重向量进行点积,并将结果与一个阈值(T)进行比较,来决定输出是 0 还是 1,常用于执行二元分类任务。对于 AND、OR 和 NOT 这三种基本逻辑运算可以简单通过二维坐标图确定 w 和 T 的值/合理取值范围:

img

上图来自实验教程

AND 运算真值表

$x_1$ $x_2$ $x_1\ AND\ x_2$
0 0 0
0 1 0
1 0 0
1 1 1

设置权重 w1 = 1, w2 = 1,并设阈值 T = 2

感知机的输出 y = 1 当且仅当 x1 + x2 ≥ 2

OR 运算真值表

$x_1$ $x_2$ $x_1\ OR\ x_2$
0 0 0
0 1 1
1 0 1
1 1 1

设置权重 w1 = 1, w2 = 1,并设阈值 T = 1

感知机的输出 y = 1 当且仅当 x1 + x2 ≥ 1

NOT 运算真值表

$x_1$ $NOT\ x_1$
0 1
1 0

设置权重 w = -1,并设阈值 T = -0.5

感知机的输出 y = 1 当且仅当 -x ≥ -0.5

  • 尝试用简洁的方式表示前向传播计算

前向传播计算是通过输入矩阵和权重矩阵的乘积再加上偏置作为输入,应用激活函数转换这个值得出下一层的数据,逐层向前转播直至输出层。

首先假设前向传播的输入层中输入矩阵为 $X$,该层权重矩阵为 $W$,激活函数为 $f$,偏置为$b$,那么输入层的输出为 $Z = XW + b$。该矩阵输入给中间层,用作后续计算;中间层的输出为$A = f(Z)$,然后数值持续传播。

  • 参考使用卷积神经网络进行图像识别节的代码,自行设计神经网络完成对 cifar10 数据集的分类

数据集为 CIFAR-10 Dataset,详细代码请见文件 cifar10.ipynb,训练中使用 TersorflowBoard 对数据进行查看如下,可见准确率约 75%:

img

实验总结

通过本次实验,我初步认识了深度学习的环境配置和实验流程,完成了MNIST和CIFAR10数据集的训练和识别。但是在实验过程中出现了环境配置的问题,通过查询网络获得了解决方式,完成了整个实验。

实验2-1:深度学习基础