Residual network II -- realization by tensorflow
来填ResNet的坑,residual network的原理已经在上一篇里做了介绍,这一篇来讨论如何用TensorFlow实现。
虽然TF提供了slim这个库,可以很方便地搭建网络,但考虑到移植和扩展性,还是决定用tf.contrib.layers
的函数和tf基本的函数来写。我们知道,ResNet的核心模块是Bottleneck,如下图所示,每个bottleneck的输入会通过两条路径在输出汇聚,计算残差,作为下一层的输入。

多个botleneck组合成一个block,通常会在每个block的最后一个bottleneck进行降采样,以缩小特征图大小。
具体的实现可以参考我的notebook, 下面贴一个在手写体识别样本上的测试结果,对比了这篇文章里讨论的DNN网络。

可以看出ResNet的效果还是非常显著的。但是得强调一下,由于网络显著加深,训练时占用的显存资源非常大,普通的GPU非常吃力。