本文依据Ryan Dahl的tensorflow-resnet程序源码撰写。
论文里面有两个小细节需要在这里说明一下,其中一个依然有疑问,两个细节分别是conv层的down sampling方法和网络最后部分的global average pooling layer,下面分开说。
一、Conv层的 down sampling方法
ResNet网络里的第3、4、5个conv层的第一个卷积层负责Down sampling,stride为2,为了方便说明,再引入ResNet的结构,如下图:
但每个conv层的第一层都是1×1的kernel啊,如果stride是2的话,那采集的数据信息岂不是丢失了一半?难以理解!
二、Global average pooling layer
直接贴上程序的源码吧,这个pooling太粗暴了
x = tf.reduce_mean(x, reduction_indices=[1, 2], name="avg_pool")
x经过Global average pooling layer前后shape对比
before: (batch_size, 7, 7, 2048)
after : (batch_size, 2048)
直接算7×7 kernel的平均值,这样数据的细节也要丢失不少吧。。
网友评论