本文参考:
《Tensorflow学习指南:深度学习系统构建详解》
在Tensorflow的学习中,关于Tensorflow的抽象与简化提到最多的就是TF-Slim,因此做了一下简单的记录。TF-Slim属于Tensorflow的抽象库,相对于直接使用Tensorflow硬核搭建CNN,使用TF-Slim代码更加简单,主要原因在于TF-Slim可以直接定义一个层级的操作,包括卷积核大小、数量、权值初始化、正则化和激活函数:
net = slim.conv2d(inputs, 64, [11,11], 4, padding='SAME',
weights_initializer = tf.truncated_normal_initializer(0.0,0.01),
weights_regularizer = slim.l2_regularizer(0.0005))
如果网络结构中存在几个相同的卷积层相连,可以使用repeat命令高效实现,如定义连续五个卷积层:
net = slim.repeat(net, 5, slim.conv2d, 128, [3,3], scope='conv1')
另外TF-Slim可以使用arg_scope产生域,允许传递一组共享参数给域中的每个操作,由于书中并没有完整的实例,因此利用TF-Slim搭建了一个简单的CNN对MNIST数据集进行了识别分类,其完整代码如下:
import tensorflow as tf
from tensorflow.contrib import slim