2024年夏季《深度学习》学习报告
姓名和学号? | xxx |
---|---|
本实验属于哪门课程? | XXXX大学24夏《深度学习》 |
学习内容? | 卷积神经网络 |
博客地址? | XXXXXXX |
一、学习目标
1、CNN的基本结构:卷积、池化、全连接;
2、典型的⽹络结构:AlexNet、VGG、GoogleNet、ResNe。
二、学习内容
【第⼀部分:代码练习】在⾕歌 Colab 上完成上⾯的代码练习,关键步骤截图,并附⼀些⾃⼰的
想法和解读。
- MNIST 数据集分类:构建简单的CNN对 mnist 数据集进⾏分类。同时,还会在实验中学习池化与卷积操作的基本作⽤, 实验指导链接
- CIFAR10 数据集分类:使⽤ CNN 对 CIFAR10 数据集进⾏分类, 实验指导链接
- 使⽤ VGG16 对 CIFAR10 分类,实验指导链接
【第⼆部分:问题总结】思考下⾯的问题:
- dataloader ⾥⾯ shuffle 取不同值有什么区别?
- transform ⾥,取了不同值,这个有什么区别?
- epoch 和 batch 的区别?
- 1x1的卷积和 FC 有什么区别?主要起什么作⽤?
- residual leanring 为什么能够提升准确率?
- 代码练习⼆⾥,⽹络和1989年 Lecun 提出的 LeNet 有什么区别?
- 代码练习⼆⾥,卷积以后feature map 尺⼨会变⼩,如何应⽤ Residual Learning?
- 有什么⽅法可以进⼀步提升准确率?
三、程序运行结果
代码练习1:https://colab.research.google.com/drive/1lIfOm2m-mU2rDKyTwBE7L-_bGqRoCNwS?usp=sharing
代码练习2:https://colab.research.google.com/drive/1eAuC1iE-A3ohMvHKtvXsjLzyt7WUJzXV?usp=sharing
代码练习3:https://colab.research.google.com/drive/1xkiLqU6vgiCSh4H5aTxzx-ZCCOcIrGtr?usp=sharing
四、问题总结与体会
问题1:
-
解决方案:pytorch 版本问题
将
images, labels = iter(trainloader).next()
改为
images, labels = next(iter(trainloader))
问题:
-
dataloader ⾥⾯ shuffle 取不同值有什么区别?
DataLoader 中shuffle 参数用于控制数据加载顺序。它有三种不同的取值,分别是 True、False 和一个整数值。
- 当 shuffle=True 时,数据会在每个 epoch(训练集全部数据的一次遍历)开始之前被随机打乱。这样可以确保每个 epoch 中的样本顺序都是不同的,有助于模型学习到更好的特征,避免模型对于固定顺序的数据过度拟合。
- 当 shuffle=False 时,数据将按照原始顺序加载,不会进行打乱。这在某些情况下可能是有用的,例如需要对模型进行调试或评估时,可以确保每个样本按照一定的顺序加载,以便进行比较或分析。
- 当 shuffle 为一个整数值时,数据将按照该整数值作为随机种子进行打乱。这意味着在每个 epoch 开始时,数据将按照相同的顺序进行打乱,因此每个 epoch 中的数据加载顺序都是一致的。这在需要重复实验或比较不同模型的结果时是有用的,确保每个模型在相同的数据顺序下进行训练。
-
transform ⾥,取了不同值,这个有什么区别?
- ToTensor():将数据转换为 PyTorch 的 Tensor 格式。
- Normalize(mean, std):对数据进行标准化处理,减去均值并除以标准差。
- RandomCrop(size):随机裁剪图像为指定大小。
- RandomHorizontalFlip():随机水平翻转图像。
对于
transform=transforms.Compose([transforms.ToTensor(), transforms.Normalize((0.1307,), (0.3081,))])
适用于灰度图像数据,因为它只有一个通道。
对于transform=transforms.Compose([transforms.ToTensor(), transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))])
适用于多通道图像数据,如 RGB 图像。 -
epoch 和 batch 的区别?
Epoch 表示完整地遍历整个训练数据集的次数。Batch 表示一次迭代中所使用的样本数量。
-
1x1的卷积和 FC 有什么区别?主要起什么作⽤?
1x1卷积主要用于特征图的通道变换和信息融合,能够减少参数和计算量;全连接层用于实现特征到类别的映射和学习特征之间的关系,增加模型的非线性能力。
1x1卷积的主要作用有:降低特征图的通道维度;引入非线性变换;融合多个特征图信息。
FC的主要作用有:实现特征到类别的映射;学习特征之间的关系;增加模型的非线性能力。 -
residual leanring 为什么能够提升准确率?
在传统的深层神经网络中,随着层数的增加,梯度可能会逐渐减小并消失。这导致训练过程中难以有效地更新较早层的参数,限制了模型的深度。通过残差连接,使得梯度可以直接传播到早期层,减轻了梯度消失问题,更容易训练深层网络。
引入残差连接允许网络学习到恒等映射,即输入直接通过残差连接传递到输出。这使得网络可以选择性地学习输入的变换,而不是强制性地对输入进行变换。更深的网络能够提供更强大的表达能力,从而有助于捕捉复杂的数据分布和提高模型的准确率。 -
代码练习⼆⾥,⽹络和1989年 Lecun 提出的 LeNet 有什么区别?
练习二中网络激活函数为ReLU函数,LeNet的激活函数为Sigmoid函数;练习二中网络的优化算法为Adam,LeNet的优化算法为梯度下降算法。
-
代码练习⼆⾥,卷积以后feature map 尺⼨会变⼩,如何应⽤ Residual Learning?
在给定的代码中,由于卷积操作导致特征图尺寸缩小,可以在每个卷积操作后使用1x1的卷积来调整特征图的通道数,并应用残差连接。
-
有什么⽅法可以进⼀步提升准确率?
可以调整更加合适的超参数;在训练过程中进行数据增强操作;使用正则化技术,如L1或L2正则化、Dropout等,可以减少过拟合现象。