视频心得

1.卷积神经网络与传统神经网络从结构上看都是层级结构,但由于图像数据处理方式(卷积,池化)差异使卷积神经网络的输出结果更加接近我们想要的结果。
2.​ 通过视频的学习,对于神经网络的认识还是不够的,对于AlexNet、ZFNet等结构还只是处于大体了解基本原理。关于如何合理地应用这些特殊的卷积神经网络还要再仔细学习。
3.池化是卷积神经网络的另一重要概念。简单理解可以看作是对图像的一次“有损压缩”,因为在实际的训练中,我们并不需要对图像中的每一个细节都进行特征提取和训练,所以池化的作用就是更进一步的信息抽象和特征提取,当然也会减小数据的处理量。

卷积神经网络代码练习

1.引入库
第三次作业:卷积神经网络_全连接
2.加载数据(MNIST)
第三次作业:卷积神经网络_特征提取_02
第三次作业:卷积神经网络_特征提取_03
3.显示数据集中的部分图像
第三次作业:卷积神经网络_卷积神经网络_04
4.创建网络
第三次作业:卷积神经网络_特征提取_05
第三次作业:卷积神经网络_池化_06
5.定义训练和测试函数
第三次作业:卷积神经网络_池化_07
第三次作业:卷积神经网络_特征提取_08
6.在小型全连接网络上训练
第三次作业:卷积神经网络_卷积神经网络_09
7.在卷积神经网络上训练
第三次作业:卷积神经网络_原代码_10
8.打乱像素顺序再次在两个网络上训练与测试

像素打乱:

第三次作业:卷积神经网络_全连接_11

重新定义训练与测试函数,我们写了两个函数 train_perm 和 test_perm,分别对应着加入像素打乱顺序的训练函数与测试函数。

第三次作业:卷积神经网络_特征提取_12
第三次作业:卷积神经网络_全连接_13

在全连接网络上训练与测试

第三次作业:卷积神经网络_卷积神经网络_14

在卷积神经网络上训练与测试

第三次作业:卷积神经网络_全连接_15

总结:从打乱像素顺序的实验结果来看,全连接网络的性能基本上没有发生变化,但是 卷积神经网络的性能明显下降。这是因为对于卷积神经网络,会利用像素的局部关系,但是打乱顺序以后,这些像素间的关系将无法得到利用。

CIFAR10数据分类

1.用 torchvision加载并归一化 CIFAR10
第三次作业:卷积神经网络_池化_16
2.展示 CIFAR10 里面的一些图片
第三次作业:卷积神经网络_特征提取_17
第三次作业:卷积神经网络_全连接_18
3.接下来定义网络,损失函数和优化器
第三次作业:卷积神经网络_池化_19
4.训练网络
第三次作业:卷积神经网络_池化_20
第三次作业:卷积神经网络_卷积神经网络_21
5.从测试集中取出8张图片
第三次作业:卷积神经网络_特征提取_22
6.把图片输入模型,看看CNN把这些图片识别成什么
第三次作业:卷积神经网络_池化_23

可以看到其中几个识别错了

7.求准确率
第三次作业:卷积神经网络_原代码_24

用VGG16进行CIFAR10分类

1.定义 dataloader
第三次作业:卷积神经网络_池化_25
第三次作业:卷积神经网络_特征提取_26
2.VGG 网络定义
第三次作业:卷积神经网络_特征提取_27
(原代码中出现“cfg”无法识别问题,将参数cfg改为self.cfg后正常运行)
3. 网络训练
第三次作业:卷积神经网络_特征提取_28
第三次作业:卷积神经网络_原代码_29

(原代码出现RuntimeError: mat1 and mat2 shapes cannot be multiplied (128x512 and 2048x10)报错,因此对nn.Linear 参数进行修改,把2048改成了512。)
4.测试验证准确率
第三次作业:卷积神经网络_原代码_30

使用一个简化版的 VGG 网络,就能够显著地将准确率由 64%,提升到 83.49%