深度学习三部曲:①搭建神经网络结构
②找到一个合适的损失函数
③找到一个合适的优化函数,更新参数
损失函数:用来衡量吻合度(可以调整参数/权重,使得映射的结果和实际类别吻合)
卷积:对两个实变函数的一种数学操作(局部关联,参数共享)
典型的卷积网络:由卷积层、池化层、全连接层交叉堆叠而成
输出的特征图大小(有padding时):(N+padding*2-F)/stride+1
池化:保留了主要特征的同时减少参数和计算量,防止过拟合,提高模型泛化能力;
它一般处于卷积层与卷积层之间,全连接层与全连接层之间。
全连接层:两层之间所有神经元都有权重链接;
通常全连接层在卷积神经网络尾部;
全连接层参数量通常最大。
典型结构:①AlexNet ReLU=max(0,x)
ReLU优点:解决了梯度消失的问题(在正区间);
计算速度特别快,只需要判断输入是否大于0;
收敛速度远快于sigmoid。
数据增强:平移、翻转、对称 ,改变RGB通道强度。
②ZFNet:卷积层1中的感受野变小(认为更加详细)
③VGG:更深网络,参数大多在全连接层中
④GoogleNet:用小的卷积核替代大的卷积核(降低参数量,增加非线性激活函数使网络产生更多独立特,表征能力更 强,训练更快)
输出:没有额外的全连接层
⑤ResNet:残差学习网络(除了输出层之外没有其他全连接层)
残差思想:去掉相同的主体部分,从而突出微小的变化,可以被用来训练非常深的网络
问题回答:
1、dataloader里面shuffle取不同值有什么区别?
dataloader里面的shuffle值取决了是否进行随机打乱顺序的操作,它为True时,表示数据输入的顺序会被随机打乱,而它为False时,输入数据的顺序是固定的,不会被打乱。打乱顺序会让多样性增加,一般用于训练时,而测试时一般没有必要。
2、transform里,取了不同值,这个有什么区别?
transform取不同值决定了对于输入的PIL图片进行的不同的变换,比如代码中如下项的含义:
ToTensor:归一化;
Normalize:标准化;
RandomCrop:随机裁剪;
RandomHorizontalFlip:图片一半概率翻转,一半概率不翻转;
Compose:将transforms进行有序组合;
这些操作可以用于数据增强,提高数据模型的泛化能力。
3、epoch 和 batch 的区别?
所有训练样本在神经网络中都进行了一次正向传播和一次反向传播,称为完成了一次epoch。epoch是训练整个训练集的次数。当数据集很大时,不能一次性将所有数据送进去训练,因此可以将一个完整训练样本(所有数据)分割成几份batch,每份的大小为batch size。
4、1x1的卷积和 FC 有什么区别?主要起什么作用?
卷积跟全连接都是把特征图中的元素乘以权重再求和,全连接是把特征图拆开组成一个一维向量,再乘以一个权重向量,这两个向量中的元素一一对应所以输出结果是一个值。11的卷积核表明只由一个权重组成,如果特征图尺寸也是11的话,那输出就是一个值,此时与全连接完全一样。但是如果特征图尺寸不是11,而是wh的话,那么11的卷积输出就不是一个值而是wh的一个矩阵。
全连接层的作用是,可以将卷积得到的局部特征连接起来,综合考虑整个图像。
1*1卷积的主要作用有降维、加入非线性、跨通道信息交互、减少卷积核的参数等。
5、residual leanring 为什么能够提升准确率?
residual leanring的深度可以很深,容易优化,因此可以提高准确率。通常深度较深的网络会出现梯度消失的情况,而residual learning可以优化这一问题,将输入的信息绕道传到输出,避免了梯度消失的现象,保护信息的完整性,同时实现恒等映射,提升准确率
6、代码练习二里,网络和1989年 Lecun 提出的 LeNet 有什么区别?
LeNet中每个卷积块中的基本单元是一个卷积层、一个 sigmoid 激活函数和平均池化层,而代码练习二中的网络使用更有效的ReLU激活函数,以及最大池化层。
7、代码练习二里,卷积以后feature map 尺寸会变小,如何应用 Residual Learning?
使用1*1的卷积或者使用填充padding的方法来调整feature map的尺寸。
8、有什么方法可以进一步提升准确率?
(1)选择合适的优化器、损失函数、激活函数
(2)使用特征更明显、分类更合理的数据集训练
(3)选用性能更高的神经网络结构