一、学习
1.卷积神经网络的应用
人脸识别、图像生成、图像风格转换、自动驾驶
2.传统神经网络和卷积神经网络
2.1搭建神经网络的步骤:
- 搭建神经网络结构
- 找到合适的损失函数(如:交叉熵损失函数、均方误差等)
- 找到合适的优化函数,更新参数(如:BP算法、随机梯度下降等)
2.2全连接神经网络:
全部由全连接层组成的神经网络
2.3区别:
全连接神经网络也可用于计算机视觉,但因处理图像时权重矩阵的参数过多,出现过拟合现象。而卷积神经网络通过卷积核将神经元相连实现了局部关联,同时因为使用的卷积核不变,所以实现了参数共享,大大降低了参数数量。
3.神经网络基本组成结构
一个典型的卷积神经网络通常由卷积层、池化层和全连接层交叉堆叠而成
- **卷积:**卷积是对两个实变函数的一种数学操作,即一种内积操作。
- **权重:**卷积核中的每一个值
- **感受野:**在进行一次卷积时,卷积核所对应的输入区域。
- **特征图:**经过一次卷积后输出的结果
- **padding:**有时因为步长大或者因为边界特征不能很好提取,因此会在边界置padding
- **步长:**卷积核每次移动的距离
- 深度: feature map厚度,卷积核个数
- 池化: 保留了主要特征的同时减少参数和计算量,防止过拟合,提高模型泛化能力。
- 全连接层: 两层之间所有神经元都有权重链接,通常在卷积神经网络尾部,全连接层参数量通常最大。通常进行展层之后与神经元相连。
4.卷积神经网络典型结构
4.1Alexnet:
4.2ZFNet:
4.3VGG:
4.4GoogleNet
4.5ResNet
二、实验
实验一 、MNIST数据集分类
1、加载数据
2、创建网络
这一步进行网络的构建和定义训练和测试函数
3、在小型全连接网络上训练
4、在卷积神经网络上训练
5、打乱像素顺序再次在两个网络上训练与测试
在全连接网络上训练和测试
在卷积神经网络上训练与测试
实验二、CIFAR10数据集分类
1、加载并归一化数据集
展示图片
2、定义网络、损失函数和优化器
3、训练网络
4、取出八张图片并进行识别实验,并查看准确率
实验三、使用VGG16对CIFAR10分类
1、定义dataloader
2、VGG网络定义
3、网络训练
4、测试验证准确率
三、问题与思考
1.dataloader 里面 shuffle 取不同值有什么区别?
dataloader中的shuffle的作用是是否对每次迭代时的数据进行打乱,如果需要打乱,则值为True,否则为False。
2.transform 里,取了不同值,这个有什么区别?
transform对图像进行预处理,提高模型泛化能力。经查阅,知道其有以下区别:
①裁剪
transforms.CenterCrop中心裁剪
transforms.RandomCrop随机裁剪
transforms.RandomResizedCrop随机长宽比裁剪
transforms.FiveCrop上下左右中心裁剪
transforms.TenCrop上下左右中心裁剪后翻转
②翻转
transforms.RandomHorizontalFlip(p=0.5)依概率p水平翻转
transforms.RandomVerticalFlip(p=0.5)依概率p垂直翻转
③旋转
transforms.RandomRotation随机旋转
④图像变换
transforms.Resize调整尺寸
transforms.Normalize标准化
transforms.ToTensor转为tensor
transforms.Pad 填充
transforms.ColorJitter修改亮度、对比度和饱和度
transforms.Grayscale变为灰度图
transforms.LinearTransformation()线性变换
transforms.RandomAffine仿射变换
transforms.RandomGrayscale按照概率p转为灰度图
⑤数据增强
transforms.RandomChoice从给定的选一个进行操作
transforms.RandomApply按照概率进行操作
transforms.RandomOrder将t操作随机化
3.epoch 和 batch 的区别?
epoch指训练的次数,而batch指每一次训练一个epoch分割的每份。
epoch指所有的数据都进行一次训练,有时候损失函数不够小,需要多轮epoch。其为宏观层面上理解,
batch是由于一个epoch的数据量太多不利于操作,所以进行分割。
4.1x1的卷积和 FC 有什么区别?主要起什么作用
1×1的卷积和FC输出大小相同,但是FC在一开始根据图像大小设定好不能再变,而前者可以任意适应。1×1的卷积主要起到升维和降维的作用。
5.residual leanring 为什么能够提升准确率?
解决了梯度消失的问题,并且使用跨越的方式,变相增加了网络的深度。
6.代码练习二里,网络和1989年 Lecun 提出的 LeNet 有什么区别?
激活函数LeNet使用了sigmoid函数,实验二使用的是RELU函数。
另外LeNet采用均值池化,实验二采用最大值池化。
7.代码练习二里,卷积以后feature map 尺寸会变小,如何应用 Residual Learning?
使用1×1的卷积核改变图像大小即可。
8.有什么方法可以进一步提升准确率?
增加准确率最好的方式还是从本质上修改训练方法。此外的调整epoch次数、调整网络深度等方式,容易造成过拟合的问题。