【课后作业01】卷积神经网络的结构设计与实现 习题答案

作者:欧新宇(Xinyu OU)
开发平台:Paddle 1.8, Paddle 2.1
运行环境:Intel Core i7-7700K CPU 4.2GHz, nVidia GeForce GTX 1080 Ti
本教案所涉及的数据集仅用于教学和交流使用,请勿用作商用。

最后更新:2021-10-24


【实验目的】

  1. 熟悉卷积神经网络的基本结构,特别是卷积层+激活函数+池化层的叠加结构
  2. 学会计算卷积神经网络各层的超参数
  3. 学会根据网络结构图实现CNN类的定义
  4. 学会编写代码实现CNN类的基本测试
  5. 学会基于Paddle1.8(paddle.fluid)和Paddle 2.0(paddle.nn)两种框架的设计模式

【实验要求】

  1. 所有作业均在AIStudio上进行提交,提交时包含源代码和运行结果
  2. 按照给定的MNISTCIFAR-10网络的拓扑结构图,完成网络参数配置表Q1, Q4)(每个模型20分)
  3. 根据网络拓扑结构结构图参数配置表,完成MNIST神经网络类Class MNIST() Q2和CIFAR神经网络类Class CIFAR10Q5的定义(每个模型20分)
  4. 完善网络结构测试代码前向传输测试代码Q3, Q6)(每个模型10分)

【实验内容】

【任务一】 MNIST模型(Paddle 1.8)(50分)

LeNet-5模型的原始输入尺寸是32×32,但是由于MNIST数据集的样本为28×28,因此需要对LeNet-5进行一定的调整。此次我们暂定调整后的模型命名为MNIST。

Ch04assign001LeNetA

Q1: 根据LeNet-5拓扑结构图完成下列网络参数配置表(Conv1~FC2)(20分)

Layer Input Kernels_num Kernels_size Stride Padding PoolingType Output Parameters
Input 1×28×28 1×28×28
Conv1 1×28×28 6 1×5×5 1 0 6×24×24 (1×5×5+1)×6=156
Pool1 6×24×24 6 6×2×2 2 0 Max 6×12×12 0
Conv2 6×12×12 16 6×5×5 1 0 16×8×8 (6×5×5+1)×16=2416
Pool2 16×8×8 16 16×2×2 2 0 Max 16×4×4 0
Conv3 16×4×4 120 16×4×4 1 0 120×1×1 (16×4×4+1)×120=30840
FC1 (120×1×1)×1 120×1 (120+1)×84=10164
FC2 120×1 84×1 (84+1)×10=850
Output 84×1 10×1
Total = 44426

Q2: 根据LeNet-5拓扑结构图和Q1中完成的网络参数配置表完成下列MNIST模型的类定义([Your codes 1], [Your codes 2])(20分)

Q3: 完善下列网络结构测试代码([Your codes 3])(10分)

【任务二】 CIFAR10模型(Paddle 2.0)(50分)

CIFAR-10 是一个更接近普适物体的彩色图像数据集。CIFAR-10是由Hinton 的学生Alex Krizhevsky 和Ilya Sutskever 整理的一个用于识别普适物体的小型数据集,该数据集的所有样本均从 80 million tiny images 数据中获取。。一共包含10 个类别的RGB彩色图片:飞机( airplane )、汽车( automobile )、鸟类( bird )、猫( cat )、鹿( deer )、狗( dog )、蛙类( frog )、马( horse )、船( ship )和卡车( truck )。每个图片的尺寸为32 × 32 ,每个类别有6000个图像,数据集中一共有50000 张训练图片和10000 张测试图片。此外还有一个类似的CIFAR-100数据集,也由Alex和Ilya收集,该数据包含100个类,每个类100个样本,其中500个用于训练,100个用于测试。

下图是一个经典的用于CIFAR-10识别的卷积神经网络结构图。

Ch04assign002CIFAR10

Q4: 根据CIFAR-10拓扑结构图完成下列网络参数配置表(Conv1~FC2)(20分)

Layer Input Kernels_num Kernels_size Stride Padding PoolingType Output Parameters
Input 3×32×32 3×32×32
Conv1 3×32×32 32 3×5×5 1 0 32×28×28 (3×5×5+1)×32=2432
Pool1 32×28×28 32 32×2×2 2 0 Max 32×14×14 0
Conv2 32×14×14 32 32×5×5 1 0 32×10×10 (32×5×5+1)×32=25632
Pool2 32×10×10 32 32×2×2 2 0 Avg 32×5×5 0
Conv3 32×5×5 64 32×4×4 1 0 64×2×2 (32×4×4+1)×64=32832
Pool3 64×2×2 64 64×2×2 2 0 Avg 64×1×1 0
FC1 (64×1×1)×1 64×1 (64+1)×64=4160
FC2 64×1 64×10 (64+1)×10=650
Output 10×1
Total = 65706

Q5: 根据Cifar10拓扑结构图和Q4中完成的网络参数配置表完成下列Cifar10模型的类定义([Your codes 4], [Your codes 5])(20分)

Q6: 完善下列网络结构测试代码([Your codes 8], [Your codes 9])和前向传输测试代码([Your codes 10])(10分)