slim.arg_scope可以定义一些函数的默认参数值,在scope内,我们重复用到这些函数时可以不用把所有参数都写一遍,注意它没有tf.variable_scope()划分图结构的功能,
with slim.arg_scope([slim.conv2d, slim.fully_connected],
trainable=True,
activation_fn=tf.nn.relu,
weights_initializer=tf.truncated_normal_initializer(stddev=0.01),
weights_regularizer=slim.l2_regularizer(0.0001)):
with slim.arg_scope([slim.conv2d],
kernel_size=[3, 3],
padding='SAME',
normalizer_fn=slim.batch_norm):
net = slim.conv2d(net, 64, scope='conv1'))
net = slim.conv2d(net, 128, scope='conv2'))
net = slim.conv2d(net, 256, [5, 5], scope='conv3'))
slim.arg_scope的用法基本都体现在上面了。一个slim.arg_scope内可以用list来同时定义多个函数的默认参数(前提是这些函数都有这些参数),另外,slim.arg_scope也允许相互嵌套。在其中调用的函数,可以不用重复写一些参数(例如kernel_size=[3, 3]),但也允许覆盖(例如最后一行,卷积核大小为[5,5])。