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

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

  • 视频学习心得
  • 代码练习
    • MNIST数据集分类
      • 加载数据 (MNIST)
      • 创建网络
      • 在小型全连接网络上训练(Fully-connected network)
      • 在卷积神经网络上训练
      • 打乱像素顺序再次在两个网络上训练与测试
    • CIFAR 数据集分类
    • 使用VGG16对CIFAR10分类
      • 定义 dataloader
      • VGG 网络定义
      • 网络训练
      • 测试验证正确率

视频学习心得

视频的前部分介绍了传统神经网络与卷积神经网络,并进行对比。讲到了深度学习三部曲,即step1:搭建神经网络结构,step2:找到一个合适的损失函数,step3:找到一个合适的优化函数,更新参数。其中损失函数用来衡量吻合度。接下来讲到传统神经网络可以应用到计算机视觉上,但全连接网络处理图像的问题存在参数过多问题从而导致过拟合,而卷积神经网络可以通过局部关联和参数共享来解决。卷积网络的基本组成结构是卷积、池化和全连接。卷积是对两个实变函数的一种数学操作,在图像处理中需要二维卷积,因为图像以二维矩阵的形式输入到神经网络。池化一般处于卷积层与卷积层之间,全连接层与全连接层之间,它保留了主要特征的同时减少参数和计算量,防止过拟合,提高了模型泛化能力。全连接是两层之间所有神经元都有权重链接,且全连接层通常在卷积神经网络尾部,并且参数量很大。之后讲解了一系列卷积神经网络典型结构。这次学习之后感觉有了一个大致的了解,但对具体的内容还不是很清楚,仍需要在后期的学习与实践中深入理解。

代码练习

MNIST数据集分类

使用PyTorch进行CNN的训练与测试

加载数据 (MNIST)

第三次作业:卷积神经网络_第1张图片
第三次作业:卷积神经网络_第2张图片

创建网络

第三次作业:卷积神经网络_第3张图片
定义训练和测试函数
第三次作业:卷积神经网络_第4张图片

在小型全连接网络上训练(Fully-connected network)

第三次作业:卷积神经网络_第5张图片

在卷积神经网络上训练

第三次作业:卷积神经网络_第6张图片
由上面的测试结果可以发现,含有相同参数的 CNN 效果明显优于简单的全连接网络,因为CNN 可以通过卷积和池化更好地挖掘图像中的信息。

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

把图像中的像素打乱顺序,卷积和池化就难以发挥作用了。

在全连接网络上训练与测试:
第三次作业:卷积神经网络_第7张图片

在卷积神经网络上训练与测试:
第三次作业:卷积神经网络_第8张图片
从打乱像素顺序的实验结果可以看出,全连接网络的性能基本上没有发生变化,但是卷积神经网络的性能明显下降。
这是因为对于卷积神经网络,会利用像素的局部关系,但是打乱顺序以后,这些像素间的关系将无法得到利用。

CIFAR 数据集分类

下面将使用CIFAR10数据集,它包含十个类别:‘airplane’, ‘automobile’,‘bird’, ‘cat’, ‘deer’, ‘dog’, ‘frog’, ‘horse’, ‘ship’, ‘truck’。CIFAR-10 中的图像尺寸为3x32x32,也就是RGB的3层颜色通道,每层通道内的尺寸为32*32。
定义网络,损失函数和优化器:
第三次作业:卷积神经网络_第9张图片

训练网络:
第三次作业:卷积神经网络_第10张图片
从测试集中取出8张图片:
第三次作业:卷积神经网络_第11张图片
把图片输入模型,查看识别结果:
第三次作业:卷积神经网络_第12张图片
其中有好几个均识别出错。
网络在整个数据集上的表现:
第三次作业:卷积神经网络_第13张图片
准确率为63%。通过改进网络结构,性能还可以进一步提升。

使用VGG16对CIFAR10分类

定义 dataloader

第三次作业:卷积神经网络_第14张图片

VGG 网络定义

模型的实现代码:
第三次作业:卷积神经网络_第15张图片

网络训练

训练的代码与之前一样:
第三次作业:卷积神经网络_第16张图片

测试验证正确率

测试的代码和之前也是一样的:
第三次作业:卷积神经网络_第17张图片
可以看到,使用一个简化版的VGG网络,就能够显著地将准确率由 64%,提升到 83%。

你可能感兴趣的:(软件工程,神经网络,深度学习,pytorch)