第一部分:代码练习
1 MNIST 数据集分类
1.1 准备工作
导入相关库
定义函数:计算模型中有多少参数
1.2 加载MNIST数据集
可视化数据
1.3 创建网络
全连接网络
CNN
定义训练函数和测试函数
1.4 在小型全连接网络上训练
1.5 在CNN上训练
1.6 打乱像素顺序再次在两个网络上训练和测试
随机打乱像素顺序
重新定义训练函数和测试函数,加入打乱顺序操作
在全连接网络上训练和测试
在CNN上训练和测试
2 CIFAR10 数据集分类(CNN)
2.1 准备工作
导入相关库
可视化数据
2.2 定义网络
2.3 训练和测试网络
训练网络
小数据集测试
图片标签
测试结果
完整数据集测试
3 CIFAR10 数据集分类(VGG16)
3.1 定义 dataloader
3.2 定义网络
3.3 网络训练
3.4 网络测试
第二部分:问题总结
1 dataloader 里面 shuffle 取不同值有什么区别?
在dataloader中,shuffle参数用于控制数据在每个epoch(一个完整的数据集迭代)开始时是否随机打乱。shuffle=True时,在每个epoch开始时将数据随机打乱,这有助于防止模型对数据的顺序依赖性。shuffle=False时,数据将按照原始顺序加载,适用于某些需要按顺序处理数据的情况。
2 transform 里,取了不同值,这个有什么区别?
在transform中,不同的取值可以代表不同的数据预处理操作。例如,对图像数据进行resize、crop、翻转、颜色调整等预处理操作,每个操作取不同的值代表不同的处理方式。不同的transform操作可以帮助模型更好地学习数据的特征,提高模型的泛化能力。
3 epoch 和 batch 的区别?
Epoch是指训练过程中使用完整数据集的次数。Batch是指一次训练中使用的样本数量。在一个epoch中,模型将通过使用一批一批的数据进行多次参数更新。例如,如果数据集有1000个样本,每个batch包含10个样本,那么一个epoch将进行100次参数更新。
4 1x1的卷积和 FC 有什么区别?主要起什么作用?
1x1的卷积和全连接层(FC)都是用于特征映射的线性变换。1x1的卷积操作相当于对每个像素点进行线性组合,通常用于调整特征通道的数量,增加或减少特征维度。全连接层是在神经网络中的一种常见层,将所有输入与权重连接,输出最终的预测结果。
5 residual leanring 为什么能够提升准确率?
Residual Learning(残差学习)通过引入跳跃连接(shortcut connection)来解决深层神经网络中的梯度消失和梯度爆炸问题。通过在网络中添加跳跃连接,使得模型可以直接学习残差,从而更容易优化,避免了一些训练问题,提高了网络的准确率和训练效率。
6 代码练习二里,网络和1989年 Lecun 提出的 LeNet 有什么区别?
相较于1989年 Lecun 提出的 LeNet,现代的卷积神经网络(CNN)更深更复杂。CNN在网络架构、激活函数、优化器等方面有很大改进。例如,现代CNN中使用的激活函数如ReLU、优化器如Adam等都有助于加速训练和提高准确率。此外,现代CNN结合了Residual Learning等技术来解决梯度消失问题,允许更深层次的网络设计。
7 代码练习二里,卷积以后feature map 尺寸会变小,如何应用 Residual Learning?
在卷积后应用Residual Learning时,可以通过在跳跃连接中使用1x1卷积来调整卷积后feature map的尺寸,使其与卷积前的尺寸相匹配。这样可以确保在跳跃连接中进行特征的加和操作时尺寸相同,从而实现残差学习。
8 有什么方法可以进一步提升准确率?
- 使用更深层次的网络结构,如ResNet、Inception等,来增加网络的表示能力。
- 数据增强技术,通过随机裁剪、旋转、翻转等操作增加训练数据,有助于提高模型的泛化能力。
- 使用预训练模型和迁移学习,利用在大规模数据集上预训练的模型权重来初始化模型,然后在特定任务上微调模型参数,可以加快训练速度并提高准确率。
- 调整超参数,如学习率、正则化项等,对模型进行更好地优化。
- 使用集成学习方法,如bagging、boosting等,结合多个模型的预测结果来提高整体准确率。