slim库是tensorflow中的一个高层封装,它将原来很多tf中复杂的函数进一步封装,省去了很多重复的参数,以及平时不会考虑到的参数。可以理解为tensorflow的升级版。
导入方式:
import tensorflow as tf
import tensorflow.contrib.slim as slim
常用函数
slim.conv2d
slim.conv2d是基于tf.conv2d的进一步封装,省去了很多参数,一般调用方法如下:
net = slim.conv2d(inputs, 256, [3, 3], stride=1, scope='conv1_1')
前三个参数依次为网络的输入,输出的通道,卷积核大小,stride是做卷积时的步长。除此之外,还有几个经常被用到的参数:
padding : 补零的方式,例如'SAME'activation_fn : 激活函数,默认是nn.relunormalizer_fn : 正则化函数,默认为None,normalizer_params : slim.batch_norm中的参数,以字典形式表示weights_initializer : 权重的初始化器,initializers.xavier_initializer()weights_regularizer : 权重的正则化器,一般不怎么用到biases_initializer : 如果之前有batch norm,那么这个及下面一个就不用管了biases_regularizer : trainable : 参数是否可训练,默认为True
slim.max_pool2d
这个函数更简单了,用法如下:
net = slim.max_pool2d(net, [2, 2], scope='pool1')
slim.fully_connected
slim.fully_connected(x, 128, scope='fc1')
前两个参数分别为网络输入、输出的神经元数量。
slim.arg_scope
slim.arg_scope可以定义一些函数的默认参数值,在scope内,我们重复用到这些函数时可以不用把所有参数都写一遍。
slim.variable
在原生的Tensorflow中,创建Variable需要一个预定义的值或者一种初始化机制(比如从一个高斯分布中随机采样)。此外,如果一个变量需要在一个特定的设备上(如GPU)创建,那么必须被明确说明。为了减少变量创建所需的代码,TF-Slim提供了一些封装函数(定义在
variables.py
中),可以使得用户定义变量变得简单。
举个例子,定义一个权重(weight)变量,使用一个截断的正态分布来初始化,使用l2 loss正则化,并将该变量放置在CPU中,我们只需要声明如下:
weights = slim.variable('weights',
shape=[10, 10, 3 , 3],
initializer=tf.truncated_normal_initializer(stddev=0.1),
regularizer=slim.l2_regularizer(0.05),
device='/CPU:0')