对于工作中用到的工具进行一些总结,方便以后随时查看。
-
CNN既可以识别大物体也可以识别小物体:
CNN 可能有几层网络,每个层可能捕获对象抽象层次中的不同级别。第一层是抽象层次的最底级,CNN 一般把图片中的较小的部分识别成简单的形状,例如水平、竖直的直线,简单的色块。下一层将会上升到更高的抽象层次,一般会识别更复杂的概念,例如形状(线的组合),以此类推直至最终识别整个物体,例如狗。 -
CNN 是自主学习,我们不需要告诉 CNN 去寻找任何直线、曲线、鼻子、毛发等等。CNN 从训练集中学习并发现值得寻找的特征。
-
为什么CNN需要收敛后再去查看结果?
正如Visualizing and Understanding Convolutional Networks这篇论文描述的,从特征图来看高层网络conv5的变化过程,我们可以看到,刚开始几次的迭代,基本变化不是很大,但是到了40~50的迭代的时候,变化很大,因此我们以后在训练网络的时候,不要着急看结果,看结果需要保证网络收敛。 -
SegNet 的新颖之处在于解码器对其较低分辨率的输入特征图进行上采样的方式。具体地说,解码器使用了在相应编码器的最大池化步骤中计算的池化索引来执行非线性上采样。这种方法消除了学习上采样的需要,经上采样后的特征图是稀疏的,因此随后使用可训练的卷积核进行卷积操作,生成密集的特征图。编码器中的每一个最大池化层的索引都被存储起来,用于之后在解码器中使用那些存储的索引来对相应的特征图进行反池化操作。虽然这有助于保持高频信息的完整性,但当对低分辨率的特征图进行反池化时,它也会忽略邻近的信息。
-
随机裁剪的作用:
模型对特征的偏好不同,模型越简单(在保证分类误差最小的情况下)该模型会更倾向于选择更简单特征(更简单特征的最优模型容量与该模型容量的距离更小)。这里假设区分模糊比区分坦克类型更简单,那么模型将更容易学习到区分模糊和清晰。所以在作训练的时候,目的分类特征越难,越需要保证其他无关特征的分布在类间的均匀。随机裁剪相当于建立每个因子特征与相应类别的权重关系,减弱背景(或噪音)因子的权重,且使模型面对缺失值不敏感,也就可以产生更好的学习效果,增加模型稳定性。更具体的描述请看这篇博客:https://blog.csdn.net/u010165147/article/details/78633858,看完收获很多。 -
BN层的作用:
使用 tanh 作为激励函数的结果, 可以看出, 不好的初始化, 让输入数据在激活前分散得非常离散, 而有了 BN, 数据都被收拢了. 收拢的数据再放入激励函数就能很好地利用激励函数的非线性. 而且可以看出没有 BN 的数据让激活后的结果都分布在 tanh 的两端, 而这两端的梯度又非常的小, 是的后面的误差都不能往前传, 导致神经网络死掉了。
使用 relu 激励函数的结果, 我们可以看到, 没有使用 BN 的误差要高, 线条不能拟合数据, 原因是我们有一个 “Bad initialization”, 初始 bias = -0.2 , 这一招, 让 relu 无法捕捉到在负数区间的输入值. 而有了 BN, 这就不成问题了。(具体的请看莫烦pytorch教程)
参考文献:
https://blog.csdn.net/Julialove102123/article/details/78292807
https://blog.csdn.net/u010165147/article/details/78633858