软件工程第三次作业
1、视频学习心得
刘少愉:对玻尔兹曼、自编码器、训练误差与泛化误差、欠拟合与过拟合、频率学派与贝叶斯学派、卷积神经网络、池化、全连接以及各种网络类型有了一定了解,学习了深度学习的三个至关重要的步骤。
郭隆鑫:深度学习三部曲:搭建神经网络结构、找到一个合适的损失函数、找到一个合适的优化函数,更新参数
图像是以二维矩阵形式输入的,一个典型的卷积网络是由卷积层、池化层、全连接层交叉堆叠而成,步长不满足时用padding补0.池化理解为缩放。ResNet错误率只有3.57%,能够训练非常深的网络
程陆瑶:
第一个视频:
了解了训练误差与泛化误差,以及泛化错误(泛化误差减训练误差),在策略设计时应该追求于训练误差小,泛化错误低,追求泛化性能。同时还了解了奥卡姆剃刀原理和无免费午餐定理。
了解了欠拟合和过拟合的定义以及解决方案。
学习了在深度学习中所用到的线性代数(秩,近秩近似)和概率统计(概率学派和贝叶斯学派)等方面的知识,相关性和因果性的关系和区别,因果性=相关性+忽略因素。
深度学习的三部曲:1.搭建神经网络2.找到一个合适的损失函数3.找到一个合适的优化函数,更新参数。
损失函数的定义,常用的分类损失和回归损失。
传统神经网络和卷积神经网络区别:针对全连接网络处理图像问题的参数太多,过拟合,卷积神经网络解决方式是局部关联,参数共享。
第二个视频:
对于一维卷积的运用和卷积和有了一定了解。
掌握了卷积定义和二维卷积的求法。
掌握了卷积中所涉及的基本概念:input,filter,weights,receptive field,feature map,padding,channel,output。
金子懿:深度学习的数学基础部分,学习了玻尔兹曼机,自编码器变种,矩阵线性变换机器学习的三要素:模型,策略,算法,频率学派vs贝叶斯学派,beyond深度学习。卷积神经网络部分,学习了卷积网络的应用,传统神经网络vs卷积神经网络,卷积,池化,全连接,AlexNet,VGG,GoogleNet,ResNet。
曹舟雯:视频03:首先我学到了很多关于深度学习的数学基础的内容其中包括很多线性代数、信息论和微积分的内容。比如说,在机器学习中为了保留决定数据分布的最主要的模式或方向采取低秩近似的方法。还有梯度下降是神经网络共同的基础。我增进了对于机器学习三要素即模型、策略及算法的理解,还了解到频率学派和贝叶斯学派以及相关性和因果性的关系。
视频04:我学到了很多关于卷积神经网络的知识,首先我了解到了一些卷积网络的基本应用,比如人脸识别和图像生成。然后我学到了卷积神经网络相对于传统神经网络的进步性,还有两者的相同点和不同点。我也明白了卷积的真正含义,对卷积和卷积神经网络典型结构有了更进一步的了解。
扩展学习:通过观看这个视频,我理解了残差学习的原理,还学到很多恒等映射和SHORTCUT的知识,以及如何使用PyTorch实现ResNet152。
杨雯: 卷积神经网络的基本应用:分类、检索、检测、分割。通过人脸识别来识别遗传病、人脸表情识别、图像生成、图像风格转化、自动驾驶也是运用了卷积神经网络。对于深度学习进行了一个简单的复习:深度学习三部曲,一是搭建神经网络,二是找到一个合适的损失函数,三是找到一个合适的优化函数,更新参数。卷积神经网络的解决方式是:局部关联、参数共享,可以避免出现过拟合现象。卷积神经网络的基本结构为:卷积、池化、全连接。卷积是对两个实变函数的一种数学操作,输出的特征图大小:(N-F)/stride+1(未加padding);有padding时输出的特征图大小:(N+2*padding-F)/stride+1。Pooling的类型:Max Pooling:最大值池化,Average Pooling:平均池化。全连接:通常全连接层在卷积神经网络的尾部。AlexNet是卷积神经网络的典型结构,ZFNet的网络结构与AlexNet相同。
2、视频学习问题总结
刘少愉:
1、对深度学习三部曲中更新参数的判定标准不是很理解
郭隆鑫:
1、ResNet的灵活性是怎么体现的?为什么视频中说F(x)等于0,令输入输出都是x就是灵活性的体现?
程陆瑶:求卷积时如何在必要时进行填充
曹舟雯:
- 损失函数的相关内容
- 残差学习网络的结构和原理
杨雯:
1:在改变RGB通道强度中,对RGB空间做一个高斯扰动,高斯扰动是什么?
2:对于GoogleNet不是很理解。
3、卷积神经网络
刘少愉:
郭隆鑫:
程陆瑶:
加载数据:
显示数据集中的部分图像:
创建网络:
定义训练和测试函数:
在小型全连接网络上训练:
在卷积神经网络上训练:
打乱像素顺序再次在两个网络上训练与测试:
金子懿:
曹舟雯:
杨雯:
学习了MNIST数据集的使用方法:
torchvision.datasets.MNIST(root,train=True,transform=None,target_transform=None, download=False)
4、CIFAR10数据分类
刘少愉:
郭隆鑫:
程陆瑶:
下面展示 CIFAR10 里面的一些图片:
接下来定义网络,损失函数和优化器:
训练网络:
现在我们从测试集中取出8张图片:
我们把图片输入模型,看看CNN把这些图片识别成什么:
看看网络在整个数据集上的表现:
金子懿:
曹舟雯:
杨雯:
将图片输入模型后,发现CNN存在将图片识别出错的情况,准确率还可以。
5、 用VGG16进行CIFAR10分类
刘少愉:
郭隆鑫:
程陆瑶:
VGG 网络定义:
网络训练:
金子懿:
曹舟雯:
杨雯:
使用了网络结构,准确率有了很大的提高
6、代码练习遇到的问题及总结
刘少愉:对深度学习代码有了进一步了解,通过亲自运行三类问题的代码学习到更多的编码规则,并了解了卷积神经网络的基本原理,在运行过程中改正了矩阵不匹配的bug。
程陆瑶:通过代码训练进一步了解了视频学习中的相关知识,在第一个文件中,可以发现在小型全连接网络上的准确性要小于在卷积神经网络上,但是在打乱像素后,在小型连接网络上准确性无明显变化,但是在卷积神经网络上却明显下降。通过第二三代码文件运行结果比较可以发现,使用VGG网络可以显著提高准确率。在第三个代码文件中,出现了cfg未定义情况,需将cfg改为self.cfg,然后后边又出现矩阵不匹配的错误,将(2048,10)改为(512,10)即可。对于VGG神经网络的实现以及实现过程有了更深一步的理解,收获颇多。
金子懿:第三个实验有部分运行不出来后来发现是cfg未定义,将部分代码改正过会就可以运行了。通过这三个实验的学习了解我对卷积神经网络有了一个初步的理解。
曹舟雯:PyTorch里包含了CIFAR10等常用数据集,调用torchvision.datasets 即可把这些数据由远程下载到本地,并且在定义网络时要注意把具有可学习参数的层放在构造函数中。在使用VGG16对CIFAR10分类时,要注意cfg的引用要通过self.cfg来实现,并且栈不能溢出。通过这次实验,我对PyTorch的具体使用方法有了进一步了解,受益良多。