
Conv--> bn--> relu
对于上面 7x7卷积和maxpooling,注意这个卷积是不能进行bn和relu的,因为version2的顺讯是 bn->relu->conv所以 bn和relu要留到conv2层

stack_blocks_dense是把4个block都进行展开,最后一个block后要进行额外的 bn->relu reduce_mean([1,2])表示 [batch_size, 7,7,2048] 变成 [batch_size,1,1,2048] 每个7x7进行取均值

??最后一个为什么stride是1,因为不需要downsampling,代替的是average pool
bottleneck结构如下: {because of concerns on the training time that we can afford,所以改成了bottleneck结构}
一下两个结构有相同的复杂度,但是发下左边的维度是64 右边是256 其实就是4倍的关系


(a)就是第一篇论文采取的结构
这篇文章侧重在想创造一条直接的通路用来传播信息,不仅仅是在一个残差单元内,而是考虑在整个网络中。

论文发现当h(x)和f(y)都是自映射,信号能直接传播到下个单元,无论是前向传播或是后向传播,所以设计了上图(b)的结构
实验发现h(x)使用1x1卷积或者gate 都不如直接自映射得到的结果好
由post-activation 变成了 pre-activation 之前是relu在conv后, 现在relu在conv前


(1) 任何一层的输出都可以由之前某个底层的输出及一个残差结构表示

任何一层的输出都可以由原始输入和到它的所有残差输出之和表示, 而以前的网络都是层与层的积表示
(3) 对loss求导发现

求和那项不会永远都为-1,所以梯度不会弥散 vanish, 即使当weights任意小的时候
对比了不同的shortcut方式,发现就是简单的identity比较好,1x1conv效果更差,可以用来对不同维度的数据进行处理
对比了不同的relu,bn,conv的组合方式,发现以下的full pre-activation的结构效果最好




对于第一个residual结构的输入,因为前面是一个单独的conv层,我们需要对conv层的结果进行activation
对于最后一个residual结构,在addition之后要额外进行一个activation
以上为论文解读。接下来是代码实现。

到此这篇resnet18比resnet50好(resnet50和resnet101)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!
版权声明:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权、违法违规、事实不符,请将相关资料发送至xkadmin@xkablog.com进行投诉反馈,一经查实,立即处理!
转载请注明出处,原文链接:https://www.xkablog.com/rfx/48298.html