看代码的过程中,发现自己的基础特别薄弱。要慢慢积累呀。
1、深度学习网络是越深越好吗?——网络的degradation问题
在我的一般印象中,深度神经网络区别于一般神经网络的地方,就在于它的“深度”两个字。那神经网络的深度对神经网络具体有什么影响呢?
从Alexnet采取的7层神经网络开始,后有VGG为了探索神经网络最多能有多深,而采取的16/19层神经网络,再到Googlenet的22层。有人已经发现深度CNN网络在到达一定的深度后,即便再增加层数,网络的分类性能也不会提高,网络反而收敛的更慢,在测试集上的准确率也变差了(排除了数据集国小带来的过拟合等问题)。这个问题就是网络的degradation问题。
《Identity Mappings in Deep Residual Networks》中证明了degradation的产生是由于优化性能不好,这说明越深的网络反向梯度越难传导。
2、Resnet——前向:恒等映射 / 反向:对梯度敏感
已知有网络degradation的情况下,不求加深度能提高准确性,能不能至少让深度网络实现和浅层网络一样的性能,即让深度网络后面的层至少实现恒等映射的作用
从而提出了Residual Module,提高了网络能采取的深度。
在前向过程中,当浅层的输出已经足够成熟(optimal),那残差模块能使深层网络后面的层实现恒等映射的作用。
在反向过程中,residual模块会明显减小模块中参数的值从而让网络中的参数对反向传导的损失值有更敏感的响应能力,虽然根本上没有解决回传的损失小得问题,但是却让参数减小,相对而言增加了回传损失的效果,也产生了一定的正则化作用
加强版的resnet部分我还没有看,以上内容都是学习博文:https://blog.csdn.net/weixin_43624538/article/details/85049699
3、deeplab代码中input_stride和output_stride分别的意义 ——input_stride是参数,output_stride是现象
input stride为我们正常进行卷积时候,给filter设置的stride值,
output stride为该矩阵经过多次卷积pooling操作后,尺寸缩小的值,例如:
input image为224 * 224,经过多次卷积pooling操作后,feature map为7*7,那么output stride为224/7 = 32.(Approximate of what happened to the image after down sampling .)
参考:https://blog.csdn.net/weixin_39610043/article/details/87165968
4、对dilation,stride,paddings,transposed更直观的理解——理解新名词dilation
参考:https://github.com/vdumoulin/conv_arithmetic/blob/master/README.md
网友评论