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


视频心得

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

卷积神经网络代码练习

1.引入库

2.加载数据(MNIST)


3.显示数据集中的部分图像

4.创建网络


5.定义训练和测试函数


6.在小型全连接网络上训练

7.在卷积神经网络上训练

8.打乱像素顺序再次在两个网络上训练与测试

像素打乱:

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


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

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

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

CIFAR10数据分类

1.用 torchvision加载并归一化 CIFAR10

2.展示 CIFAR10 里面的一些图片


3.接下来定义网络,损失函数和优化器

4.训练网络


5.从测试集中取出8张图片

6.把图片输入模型,看看CNN把这些图片识别成什么

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

7.求准确率

用VGG16进行CIFAR10分类

1.定义 dataloader


2.VGG 网络定义

(原代码中出现“cfg”无法识别问题,将参数cfg改为self.cfg后正常运行)
3. 网络训练

(原代码出现RuntimeError: mat1 and mat2 shapes cannot be multiplied (128x512 and 2048x10)报错,因此对nn.Linear 参数进行修改,把2048改成了512。)
4.测试验证准确率

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


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM