2024年夏季《深度学习》学习报告——第二周
姓名和学号? | 仲舟,1145141919810 |
---|---|
本实验属于哪门课程? | 中国海洋大学24夏《深度学习》 |
学习内容? | 深度学习基础 |
博客地址? | this |
【第⼀部分:代码练习】
实验
在⾕歌 Colab 上完成 pytorch 代码练习中的 2.1 pytorch基础练习、2.2螺旋数据分类,关键步骤截图,并附⼀些⾃⼰的想法和解读。
MNIST 数据集分类:构建简单的CNN对 mnist 数据集进⾏分类。同时,还会在实验中学习池化与卷积操作的基本作⽤
CIFAR10 数据集分类:使⽤ CNN 对 CIFAR10 数据集进⾏分类
使⽤ VGG16 对 CIFAR10 分类
想法
为什么下面代码会报错
解读
遇到的 RuntimeError: mat1 and mat2 shapes cannot be multiplied (128x512 and 2048x10)
错误说明了在模型的全连接层中,输入和权重矩阵的形状不匹配。这通常是由于展平操作后的特征数与全连接层输入的特征数不一致导致的。将self.classifier = nn.Linear(2048, 10)改成self.classifier = nn.Linear(512, 10)即可。
【第⼆部分:问题总结】
思考下⾯的问题:
1.dataloader ⾥⾯ shuffle 取不同值有什么区别?
DataLoader 中shuffle 参数用于控制数据加载顺序。它有三种不同的取值,分别是 True、False 和一个整数值。
当 shuffle=True 时,数据会在每个 epoch(训练集全部数据的一次遍历)开始之前被随机打乱。这样可以确保每个 epoch 中的样本顺序都是不同的,有助于模型学习到更好的特征,避免模型对于固定顺序的数据过度拟合。
当 shuffle=False 时,数据将按照原始顺序加载,不会进行打乱。这在某些情况下可能是有用的,例如需要对模型进行调试或评估时,可以确保每个样本按照一定的顺序加载,以便进行比较或分析。
当 shuffle 为一个整数值时,数据将按照该整数值作为随机种子进行打乱。这意味着在每个 epoch 开始时,数据将按照相同的顺序进行打乱,因此每个 epoch 中的数据加载顺序都是一致的。这在需要重复实验或比较不同模型的结果时是有用的,确保每个模型在相同的数据顺序下进行训练。
2.transform ⾥,取了不同值,这个有什么区别?
ToTensor():将数据转换为 PyTorch 的 Tensor 格式。
Normalize(mean, std):对数据进行标准化处理,减去均值并除以标准差。
RandomCrop(size):随机裁剪图像为指定大小。
RandomHorizontalFlip():随机水平翻转图像。
3.epoch 和 batch 的区别?
Epoch 表示完整地遍历整个训练数据集的次数。Batch 表示一次迭代中所使用的样本数量。
4.1x1的卷积和 FC 有什么区别?主要起什么作⽤?、
1x1卷积主要用于特征图的通道变换和信息融合,能够减少参数和计算量;全连接层用于实现特征到类别的映射和学习特征之间的关系,增加模型的非线性能力。
1x1卷积的主要作用有:降低特征图的通道维度;引入非线性变换;融合多个特征图信息。
FC的主要作用有:实现特征到类别的映射;学习特征之间的关系;增加模型的非线性能力。
5.residual leanring 为什么能够提升准确率?
在传统的深层神经网络中,随着层数的增加,梯度可能会逐渐减小并消失。这导致训练过程中难以有效地更新较早层的参数,限制了模型的深度。通过残差连接,使得梯度可以直接传播到早期层,减轻了梯度消失问题,更容易训练深层网络。
引入残差连接允许网络学习到恒等映射,即输入直接通过残差连接传递到输出。这使得网络可以选择性地学习输入的变换,而不是强制性地对输入进行变换。更深的网络能够提供更强大的表达能力,从而有助于捕捉复杂的数据分布和提高模型的准确率。
6.代码练习⼆⾥,⽹络和1989年 Lecun 提出的 LeNet 有什么区别?
练习二中网络激活函数为ReLU函数,LeNet的激活函数为Sigmoid函数;练习二中网络的优化算法为Adam,LeNet的优化算法为梯度下降算法。
7.代码练习⼆⾥,卷积以后feature map 尺⼨会变⼩,如何应⽤ Residual Learning?
在给定的代码中,由于卷积操作导致特征图尺寸缩小,可以在每个卷积操作后使用1x1的卷积来调整特征图的通道数,并应用残差连接。
8.有什么⽅法可以进⼀步提升准确率?
可以调整更加合适的超参数;在训练过程中进行数据增强操作;使用正则化技术,如L1或L2正则化、Dropout等,可以减少过拟合现象。