软件工程第3次作业 卷积神经网络

Posted longTimeNoSee

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了软件工程第3次作业 卷积神经网络相关的知识,希望对你有一定的参考价值。

【第二部分】代码练习

MNIST_数据集分类

数据的加载和预处理

  1. torchvision.transforms是pytorch中的图像预处理包。一般用Compose把多个步骤整合到一起:
  2. 我们可以使用 transforms.ToTensor() 将 PIL.Image/numpy.ndarray 数据进转化为torch.FloadTensor,并归一化到[0, 1.0]:
  3. Normalize用于标准化图像数据取值 .Normalize(mean, std, inplace=False) input[channel] = (input[channel] - mean[channel]) / std[channel]

显示训练数据

squeeze()从数组的形状中删除单维度条目,即把shape中为1的维度去掉

Softmax函数常用的用法是指定参数dim就可以:

LogSoftmax其实就是对softmax的结果进行log,即Log(Softmax(x))

log下什么都不写默认是自然对数

(1)dim=0:对每一列的所有元素进行softmax运算,并使得每一列所有元素和为1

(2)dim=1:对每一行的所有元素进行softmax运算,并使得每一行所有元素和为1

​ 定义网络时,需要继承nn.Module,并实现它的forward方法,把网络中具有可学习参数的层放在构造函数init中。

只要在nn.Module的子类中定义了forward函数,backward函数就会自动被实现(利用autograd)。

  • cpu()将变量放在cpu上,仍为tensor:

  • numpy()将tensor转换为numpy:注意cuda上面的变量类型只能是tensor,不能是其他

  • GPU 上的Tensor 不能直接转换为NumPy ndarray

定义网络结构(可以用Sequential,也可以不使用

model.train()的作用是启用 Batch Normalization 和 Dropout。

model.eval()的作用是不启用 Batch Normalization 和 Dropout。

全连接网络训练结果

卷积神经网络训练结果

但是打乱像素顺序后,全连接网络的性能基本上没有发生变化,但是 卷积神经网络的性能明显下降。

这是因为对于卷积神经网络,会利用像素的局部关系,但是打乱顺序以后,这些像素间的关系将无法得到利用。

(下图为打乱顺序后,全连接和卷积神经网络运行结果)

CIFAR10数据分类

数据图片截图

全连接层是需要特征图像素量总和*通道数作为输入的

微调了神经网络的参数,最终得到了70%左右的正确率

用VGG16进行CIFAR10分类

transform,dataloader 和之前定义的有所不同,不同之处在于训练部分的数据集增加了数据的增强,利用随机裁剪以及随机翻转,以期待增强模型的泛化能力

在训练过程中,数据分布会发生变化,对下一层网络的学习带来困难。Batch Normalization将数据拉回到均值为0,方差为1的正态分布上(归一化),一方面使得数据分布一致,另一方面避免梯度消失、梯度爆炸。

执行GitHub上代码是发现了一个小bug,这里传入的cfg需要改成self.cfg,否则会报未定义的错误

需要删除掉最后的最大池化层,否则无法让全连接层的输入满足2048

略微调整了网络结构,使之与VGG16更相似,由于输入图片大小为32*32,因此我们无法使用过多的池化层,所以难以完全复现VGG16的网络结构

后来因为资源不足了(可能是挂着太久了忘记关了),被迫使用本地运行时

最终正确率为87%左右

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

视频学习心得及问题总结

柯家航

学习总结

  • 卷积神经网络:一种广泛应用于计算机图像处理的算法,用途包括以下几项
    • 分类
    • 检索
    • 分割
    • 检测
    • 图像风格化处理
  • 搭建神经网络的三个重要步骤:Neural Network(初步搭建神经网络的结构)->Cost Function-(找到合适的损失函数)>Optimization(找到一个合适的优化函数),在这三个过程当中都有对应的算法进行支持
  • 卷积神经网络可以改善全连接网络由于权重聚恒参数太多出现过拟合的情况,主要的优化思想是:局部关联,参数共享
  • 卷积的初步探究:卷积是对两个事变函数所进行的一种数学操作。y=wx+b,卷积的几个重要概念输入,卷积核,感受野,特征图,padding,深度,输出
  • 池化:池化的主要目的是在保证图像主要特征的前提下尽可能减少参数和计算量,防止出现过拟合。池化有以下两种类型:
    • 最大值池化
    • 平均池化
  • 卷积神经网络典型结构AlexNet:这中结构的特点在于可以进行大数据训练,同时加入了非线性激活函数ReLu,同时花样Dropout防止出现过拟合,具体网络执行过程如下
    • 第一次卷积:卷积 ->ReLU->池化
    • 第二次卷积:卷积->ReLu->池化
    • 第三次卷积:卷积->ReLU
    • 第五次卷积:卷积ReLU->池化
    • 第六层:全连接->ReLU-DropOut
    • 第八层:全连接->SoftMax
  • 卷积神经网络典型结构:VGG,网络输入224*224的RGB网络网络有13个卷积层(conv3)、5个最大池化层(maxpool)、3个全连接层(FC)、1个softmax层(VGG16标准
  • 卷积神经网络典型结构:ResNet,在这个网络当中采用的是一种找不同的思想,去掉相同的主题部分,从而突出微小的变化,这个模型可以被用来训练非常深的网络。

问题

  • ResNet的使用场景
  • 池化可以让模型更加泛化,但是如何确定哪一些信息是有用的、哪一些是没用的?

杜易凇

学习总结

  • 1、卷积神经网络的应用:分类、检索、检测、分割、人脸识别、图像生成、图像风格转化、自动驾驶
  • 2、卷积:对两个实变函数的一种数学操作
    通过使用filter来进行卷积,根据步长stride来移动,如果不够卷积大小的话可以用padding来周围进行补0,公式:(N+2*padding-F)/stride+1
  • 3、池化:Polling保留主要特征的同时可以减少参数和计算量,防止过拟合
    Polling的类型有最大值池化和平均值池化,实验中一般选最大值池化(一般表现较好)
  • 4、全连接:一般放在卷积神经网络尾部
  • 5、AlexNet结构:
    运用非线性激活函数ReLU
    通过Dropout, Data augementation防止过拟合
    双GPU
  • 6、ZFNet:结构与AlexNet相同,更改了一部分参数
  • 7、VGG:把AlexNet的深度加深到16和19层
  • 8、GoogleNet:使用多卷积核来增加特征多样性,但是计算量过大,所以通过1*1卷积核进行降维;Inception V3进一步降低参数量以及增加非线性激活函数。除最后的类别输出层没有额外的全连接层。
  • 9、ResNet:残差学习网络,152层深度
    残差:去掉相同主体部分
    可以训练非常深的网络

疑问

1、为什么padding补的是0,而不是选择其他值
2、不同结构的网络使用什么场景

刘佳成

学习总结

绪论

  1. 卷积神经网络应用:

    • 分类
    • 检索
    • 检测&分割
    • 人脸表情识别
    • 图像生成(对抗生成网络)
  2. 传统神经网络vs卷积神经网络不同

    • 深度学习三部曲
      • 搭建神经网络结构
      • 找到合适的损失函数(交叉熵损失cross entropy loss,均方误差MSE)
      • 合适的优化函数,更新参数(反向传播BP,随机梯度下降SGD)
    • 全连接网络处理图像的问题:参数太多,容易过拟合
    • 卷积神经网络解决: 局部关联,参数共享(一行)
    • 区别:CONY卷积、RELU激活、POOL池化、FC全连接(多一个RELU)

基本组成结构

  • 卷积,卷积核,0填充的技巧
  • 池化——保留主要特征的同时减少参数和计算量,防止过拟合
    • 最大值池化
    • 平均池化

卷积神经网络典型结构

  • AlexNet这中结构的特点在于可以进行大数据训练,同时加入了非线性激活函数ReLu,同时花样Dropout防止出现过拟合,具体网络执行过程如下
    • 第一次卷积:卷积 ->ReLU->池化
    • 第二次卷积:卷积->ReLu->池化
    • 第三次卷积:卷积->ReLU
    • 第五次卷积:卷积ReLU->池化
    • 第六层:全连接->ReLU-DropOut
    • 第八层:全连接->SoftMax
  • VGG,网络输入224*224的RGB网络网络有13个卷积层(conv3)、5个最大池化层(maxpool)、3个全连接层(FC)、1个softmax层(VGG16标准
  • ResNet,在这个网络当中采用的是一种找不同的思想,去掉相同的主题部分,从而突出微小的变化,这个模型可以被用来训练非常深的网络。

问题

  • 过拟合是怎么回事?为什么会发生过拟合?

孙远宜

学习内容

通过这次视频学习,我认识到了卷积神经网络在我们生活中无处不在,我们在深度学习时可以先做一个表示,然后通过找一个合适的损失函数来评估我们的表示,然后再找一个优化函数来更新参数。卷积涉及了很多基本概念,了解了几个卷积神经网络典型结构的相关知识和优点,卷积神经网络是深度学习中的重要模型,极大地推进了图像分类、识别和理解技术的发展。通过与其他技术相结合,卷积神经网络可以应用于各种应用系统,使人工智能也迈向了影响深远的新时代。

学习问题

不太懂如何选择合适的损失函数,对于如何拟合还不太明白。

代码练习

以上是关于软件工程第3次作业 卷积神经网络的主要内容,如果未能解决你的问题,请参考以下文章

软件工程第二次作业—结对编程

3组现代软件工程第二次作业

3组现代软件工程第四次作业

软件工程第二次作业

软件工程第三次作业

软件测试第四次作业