第3次作业:卷积神经网络
第3次作业:卷积神经网络
一、观看视频后的心得
杨欣:
第一个视频中,我了解了一些自编码器的种类。概率论是机器学习的基础,线代是数据表示和空间变换的基础,梯度下降是所有神经网络共同的基础。视频初步介绍了神经网络在学什么,以及机器学习的三个要素:模型,策略,算法。初步了解了bp神经网络以及损失函数,但是对于这个还是处于只是知道简单的概念。第二个视频中,了解到卷积网络可以说是无处不在的,各个方面都基本可以用到卷积网络。卷积网络相较于传统神经网络实现了局部关联以及参数共享。视频主要介绍了卷积神经网络的基本组成结构,卷积,池化,全连接以及卷积神经网络的几种典型结构。
问题:1.对于第一个视频中的深层网络的局部极小值关系那里感觉完全不懂,它的局部极小值与激活函数的凹凸性之间的关系不明白。2.对于视频中提到的几种卷积神经网络典型结构还是觉得讲的不是太明白。
刘宏扬:
通过本次的视频学习,了解机器其学习的三要素,对于第一个视频中所说的策略设计理念和策略设计目标有了些许的了解,与此同时也知道了两个策略设计定理(1)无免费午餐定理和(2)奥卡姆剃刀定理。知道了策略设计后模型会出现的问题(欠拟合和过拟合)以及相对的解决方法。但是对于视频一中所讲解的损失函数的部分还是不太了解。
对于第二个视频的学习,知道了卷积神经网络都可以用于解决那类问题,知道了卷积的神经网络相较与传统的神经网络有哪些优点和相同点(都是分层结构)。了解了卷积神经网络的基本结构(卷积,池化,全连接)相对来说对于卷积部分,简单点的我还可以,但是遇到难的就不太明白了。在最后,对于视频中提到的AlexNet,ZFNet,VGG,GoogleNet,和ResNet,有了些许的了解,知道了其进行了那些操作,并产生了什么样的结果。但是如果自己实现的话还是存在很大的困难的。
问题:1.视频一中的损失函数不太理解(都是公式,不知道怎么理解)
2.对于复杂的卷积目前掌握的还是不太好
王子轩:
- 视频一:深度学习的基础。首先讲解了玻尔兹曼机的理论和应用意义,但是它过于复杂,却有理论支撑;对于自编码器,起初可以用于降维,并且后来有了许多变种,如正则自编码器、稀疏自编码器、去噪自编码器、变分自编码器等,各有自己的特色功能。在机器学习中需要有概率论、线性代数、最优化的数学基础;讲解了策略设计,分析了训练误差、泛化误差,对欠拟合和过拟合进行解释以及解决办法;还有策略设计中的两个定理:无免费午餐定理、奥卡姆剃刀定理;比较了概率论中的频率学派和贝叶斯学派以及与其相关的机器学习;分析了相关性和因果性,简单说明了群体智能在生活中的应用。
- 视频二:首先说明了卷积神经网络的多种功能,比如分类、检索、分割、人脸识别、图像生成、自动驾驶等;然后在图像处理方面比较了传统神经网络和卷积神经网络的异同说明卷积神经网络的优势,其中提到了损失函数的作用;介绍了卷积、池化、全连接,卷积神经网络是由卷积层、池化层、全连接层交叉堆叠而成;而后讲解了AlexNet神经网络,使用了ReLU函数,收敛速度优于Sigmoid函数,采用随机失活和数据增强的方法;ZFNet神经网络将卷积层1的感受野改变了,但网络结构没发生变化;VGG是一个更深网络;GoogleNet改进了网络结构没有额外的全连接层使得参数极大减少,采用辅助分类器解决梯度消失问题;ResNet采用残差学习网络,深度有152层,但是解决了梯度消失问题;至于视频最后代码实战则是完全懵逼。
- 问题:泛化误差的公式有点懵;损失函数没看多明白;十二层(即较多层)全连接的神经网络为什么实际上很少产生过拟合?卷积神经网络中的基本概念有点多,没反应过来;对AlexNet的分层解析并没有看太明白,尤其是feature map没听明白是啥。
徐雪峰:通过本次学习,主要了解两个策略设计定理无免费午餐定理和奥卡姆剃刀定理。以及卷积网络的应用广泛性,卷及网络相对于传统的神经网络的优点以及其基本结构。其中视频中提到了概率论是机器学习的基础,而线代是数据表示和空间变换的基础。提到的卷积神经网络典型架构代码实现不是很明白。
谢望凌:卷积神经网络是一类包含卷积计算且具有深度结构的前馈神经网络,是深度学习的代表算法之一。卷积神经网络具有表征学习能力,能够按其阶层结构对输入信息进行平移不变分类),因此也被称为“平移不变人工神经网络。知道了两个策略设计定理(1)无免费午餐定理和(2)奥卡姆剃刀定理。
张同阔:第一个视频了解了玻尔兹曼机的理论和应用意义,自编码器的变种有正则自编码器和稀疏自编码器、去噪自编码器、变分自编码器。机器学习中的数学基础包括线性代数、概率论、微积分。还了解了两个学派,频率学派和贝叶斯学派。
第二个视频了解了图像生成、图像风格转化、自动驾驶方面的内容。然后了解了深度学习的三部曲,然后就是传统神经网络和卷积神经网络的区别,最后是卷积神经网络的典型结构--AlexNet。
二、代码操作
1、MNIST数据集分类
1. 加载数据 (MNIST)
PyTorch里包含了 MNIST, CIFAR10 等常用数据集,调用 torchvision.datasets 即可把这些数据由远程下载到本地


2. 创建网络
定义网络时,需要继承nn.Module,并实现它的forward方法,把网络中具有可学习参数的层放在构造函数init中。
只要在nn.Module的子类中定义了forward函数,backward函数就会自动被实现(利用autograd)。

3. 打乱像素顺序再次在两个网络上训练与测试¶
考虑到CNN在卷积与池化上的优良特性,如果我们把图像中的像素打乱顺序,这样 卷积 和 池化 就难以发挥作用了,为了验证这个想法,我们把图像中的像素打乱顺序再试试。


2、使用CNN对CIFAR10数据集进行分类
对于视觉数据,PyTorch 创建了一个叫做 totchvision 的包,该包含有支持加载类似Imagenet,CIFAR10,MNIST 等公共数据集的数据加载模块 torchvision.datasets 和支持加载图像数据数据转换模块 torch.utils.data.DataLoader。




3、使用VGG16对CIFAR10分类
1. 定义 dataloader
需要注意的是,这里的 transform,dataloader 和之前定义的有所不同,大家自己体会。

2. VGG 网络定义

3. 网络训练
训练的代码和以前是完全一样的:

4. 测试验证准确率:
测试的代码和之前也是完全一样的。

4.想法与解读
杨欣:
前一次的代码明白了基础操作能看懂一点,但是这次代码量有点多,难度也是加了好多。我理解就是卷积神经网络有多层,其中卷积核用Rule函数激活。为了防止过拟合要加入DropOut函数?
刘宏扬:
此次代码学习难度较大,有很些部分不是很理解,模块的函数只是理解一点点,不看解释理解起来难度比较大,在demo1里知道了打乱像素顺序后,卷积神经网络相较于全连接神经网络准确度有所下降。在demo2中好多函数不理解是实现的什么目标,而且定义的卷积神经网络与视频中的有点差别,(可能是层数有点少)。

在这里使用的函数不太明白(可能是前边的知识理解不了)。损失函数不会用。demo3中展示了一个简单的VGG模型网络,参数设置哪里有点困惑,数值是随便设置的还是有一定的规定。
王子轩:
在MNIST数据集分类中,分别在小型全连接网络和卷积神经网络中训练,知道相比之下卷积神经网络的正确率更高,打乱像素后,全连接的正确率反而更高是因为在全连接网络中参数更多;在CIFAR10数据集分类使用了损失函数,其目的是衡量吻合度,然后进行优化从而提高吻合度;至于使用VGG神经网络可以显著提高准确率,相比于AlexNet,它是一个更深网络。至于具体的代码还有待研究......
徐雪峰:
具体代码有较大难度,只能大概理解其具有层次性,对于具体代码实现以及函数参数不是很明白。
谢望凌:
卷积神经网络的层级结构
数据输入层/ Input layer
卷积计算层/ CONV layer
ReLU激励层 / ReLU layer
池化层 / Pooling layer
全连接层 / FC layer
张同阔:通过学习这次的代码,了解了卷积神经网络的层次结构。也学到了如何去创建一个卷积神经网络,首先加载数据,其次创建网络,然后在小型全连接网络上训练,然后在卷积神经网络上训练,最后打乱像素顺序再次在两个网络上训练与测试。

浙公网安备 33010602011771号