一、代码部分
CNN_CIFAR10https://gitee.com/gongchuanzheng/ouc/blob/master/week2/CNN_CIFAR10.ipynbCNN对 mnist 数据集进行分类https://gitee.com/gongchuanzheng/ouc/blob/master/week2/CNN%E5%AF%B9%20mnist%20%E6%95%B0%E6%8D%AE%E9%9B%86%E8%BF%9B%E8%A1%8C%E5%88%86%E7%B1%BB.ipynbVGG16_CIFAR10https://gitee.com/gongchuanzheng/ouc/blob/master/week2/VGG16_CIFAR10.ipynb
二、问题总结
1.dataloader 里面 shuffle 取不同值有什么区别?
①shuffle=False:不对数据进行随机打乱。
②shuffle=True:对数据进行完全随机的打乱。
③shuffle=Sequence:根据指定种子来对数据进行打乱,用相同的种子打乱的结果是一样的。
2.transform里,取了不同值,这个有什么区别?
①缩放操作:
transforms.Resize(size):将图像缩放到指定的大小,size 可以是一个整数或一个元组,例如 transforms.Resize(256) 或 transforms.Resize((256, 256))。
transforms.RandomResizedCrop(size, scale=(0.08, 1.0), ratio=(0.75, 1.333)):随机裁剪并缩放图像,裁剪后的图像大小为 size,scale 和 ratio 用于指定裁剪的范围和宽高比。
②翻转操作:
transforms.RandomHorizontalFlip(p=0.5):以给定的概率随机水平翻转图像,p 为翻转概率。
transforms.RandomVerticalFlip(p=0.5):以给定的概率随机垂直翻转图像,p 为翻转概率。
③旋转操作:
transforms.RandomRotation(degrees, resample=False, expand=False, center=None):对图像进行随机旋转,degrees 为旋转角度。
transforms.RandomAffine(degrees, translate=None, scale=None, shear=None, resample=False, fillcolor=0):对图像进行仿射变换,包括旋转、平移、缩放和剪切等操作。
④色彩操作:
transforms.ColorJitter(brightness=0, contrast=0, saturation=0, hue=0):对图像进行颜色抖动,包括亮度、对比度、饱和度和色相等操作。
transforms.Grayscale(num_output_channels=1):将图像转换为灰度图像。
⑤归一化操作:
transforms.Normalize(mean, std):对图像进行归一化,mean 和 std 分别为均值和标准差。
⑥其他操作:
transforms.ToTensor():将图像转换为张量。
transforms.Lambda(lambda_func):使用自定义函数对图像进行转换。
3.epoch 和 batch 的区别?
①epoch:一个 epoch 表示模型训练过程中,将训练数据集中的所有样本都过一遍的训练过程。
②batch:一个 batch 表示在模型训练过程中,将训练数据集中的一部分样本作为一个小批次(batch)输入到模型中进行训练的过程。
4.1x1的卷积和 FC 有什么区别?主要起什么作用?
①1x1卷积层:1x1卷积层通常用于调整特征图的深度(即通道数),可以增加或减少特征图中的通道数,从而提高模型的表达能力。1x1卷积层也可以作为一种降维操作,将高维特征图转换为低维特征图以降低计算复杂度。
②全连接层:全连接层通常用于将特征图中的高维信息转换为一维向量,以便进行分类或回归等任务。
5.residual leanring 为什么能够提升准确率?
F(x) + x
深度神经网络中经常出现的梯度消失和梯度爆炸问题,使得深层网络很难学习到有效的特征。通过使用跨层连接,Residual Learning 可以将梯度直接从后面的层传递到前面的层,从而缓解这些问题。
6.代码练习二里,网络和1989年 Lecun 提出的 LeNet 有什么区别?
①模型深度和参数量:CNN 模型比 LeNet 更深,拥有更多的层数和更多的参数。
②模型结构: CNN 模型通常包括多个卷积层、池化层和全连接层。而 LeNet 模型则包括两个卷积层和三个全连接层。
③激活函数: CNN 模型通常使用 Rectified Linear Unit(ReLU)作为激活函数,而 LeNet 使用的是 Sigmoid 激活函数。ReLU 激活函数具有更好的非线性特性,可以更好地避免梯度消失问题,从而提高模型的训练效率和准确率。
7.代码练习二里,卷积以后feature map 尺寸会变小,如何应用 Residual Learning?
①使用跨层连接
②将特征图的尺寸减小到与输出特征图的尺寸相同
8.有什么方法可以进一步提升准确率?
①数据增强
②批标准化
③残差注意力机制
④自适应学习率调整