视频心得
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.测试验证准确率