辅助函数
slim.arg_scope()
slim.arg_scope可以定义一些函数的默认参数值,在scope内,我们重复用到这些函数时可以不用把所有参数都写一遍,注意它没有tf.variable_scope()划分图结构的功能,
1 2 3 4 5 6 7 8 9 10 11 12 |
|
slim.arg_scope的用法基本都体现在上面了。一个slim.arg_scope内可以用list来同时定义多个函数的默认参数(前提是这些函数都有这些参数),另外,slim.arg_scope也允许相互嵌套。在其中调用的函数,可以不用重复写一些参数(例如kernel_size=[3, 3]),但也允许覆盖(例如最后一行,卷积核大小为[5,5])。
另外,还可以把这么多scope封装成函数:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
|
slim.utils.collect_named_outputs()
将变量取个别名,并收集到collection中
1 |
|
参数意义如下,
return:这个方法会返回本次添加的tensor对象, 参数二:意义是为tensor添加一个别名,并收集进collections中 查看源码可见实现如下 if collections: append_tensor_alias(outputs,alias) ops.add_to_collections(collections,outputs) return outputs 据说本方法位置已经被转移到这里了, from tensorflow.contrib.layers.python.layers import utils utils.collect_named_outputs()
slim.utils.convert_collection_to_dict()
1 2 3 4 5 6 |
|
层函数
batch_norm处理
slim.batch_norm()函数,以及slim的各个层函数的normalizer_fn=slim.batch_norm调用都会用到,
其参数很多,需要以字典的形式传入,
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
|
在以其他层参数的形式调用时如下,
1 2 |
|
注意一但使用batch_norm层,在训练节点定义时需要添加一些语句,slim.batch_norm里有moving_mean和moving_variance两个量,分别表示每个批次的均值和方差。在训练时还好理解,但在测试时,moving_mean和moving_variance的含义变了,在训练时,
1 2 3 4 5 |
|
tf.contrib.slim.conv2d()
convolution(inputs, num_outputs, kernel_size, stride=1, padding='SAME', data_format=None, rate=1, activation_fn=nn.relu, normalizer_fn=None, normalizer_params=None, weights_initializer=initializers.xavier_initializer(), weights_regularizer=None, biases_initializer=init_ops.zeros_initializer(), biases_regularizer=None, reuse=None, variables_collections=None, outputs_collections=None, trainable=True, scope=None)inputs 是指需要做卷积的输入图像
num_outputs 指定卷积核的个数(就是filter的个数)
kernel_size 用于指定卷积核的维度(卷积核的宽度,卷积核的高度)
stride 为卷积时在图像每一维的步长
padding 为padding的方式选择,VALID或者SAME
data_format 是用于指定输入的input的格式
rate 这个参数不是太理解,而且tf.nn.conv2d中也没有,对于使用atrous convolution的膨胀率(不是太懂这个atrous convolution)
activation_fn 用于激活函数的指定,默认的为ReLU函数
normalizer_fn 用于指定正则化函数
normalizer_params 用于指定正则化函数的参数
weights_initializer 用于指定权重的初始化程序
weights_regularizer 为权重可选的正则化程序
biases_initializer 用于指定biase的初始化程序
biases_regularizer biases可选的正则化程序
reuse 指定是否共享层或者和变量
variable_collections 指定所有变量的集合列表或者字典
outputs_collections 指定输出被添加的集合
trainable 卷积层的参数是否可被训练
scope 共享变量所指的variable_scope
slim.conv2d是基于tf.conv2d的进一步封装,省去了很多参数,一般调用方法如下:
1 |
|
slim.max_pool2d
这个函数更简单了,用法如下:
1 |
|
slim.fully_connected
1 |
|
前两个参数分别为网络输入、输出的神经元数量。