arg_scope究竟做了什么?

时间:2017-07-21 00:01:41

标签: python tensorflow neural-network conv-neural-network

我是神经网络和TensorFlow的初学者,我正在努力理解arg_scope的作用。

在我看来,这是一种将你想要做的事情的字典放在一起的方法"具有某些变量的特定层。如果我错了,请纠正我。你会如何向初学者解释它究竟是什么?

1 个答案:

答案 0 :(得分:24)

定义卷积层时,您可能始终使用相同的填充类型和相同的初始化程序,甚至可能使用相同的卷积大小。对于您的池化,也许您也总是使用相同的2x2池大小。等等。

arg_scope是一种避免重复向相同图层类型重复提供相同参数的方法。

source documentation

中的示例
  

如何使用tf.contrib.framework.arg_scope

的示例
from third_party.tensorflow.contrib.layers.python import layers
  arg_scope = tf.contrib.framework.arg_scope
  with arg_scope([layers.conv2d], padding='SAME',
                 initializer=layers.variance_scaling_initializer(),
                 regularizer=layers.l2_regularizer(0.05)):
    net = layers.conv2d(inputs, 64, [11, 11], 4, padding='VALID', scope='conv1')
    net = layers.conv2d(net, 256, [5, 5], scope='conv2')
     

conv2d的第一次调用将表现如下:

   layers.conv2d(inputs, 64, [11, 11], 4, padding='VALID',
                  initializer=layers.variance_scaling_initializer(),
                  regularizer=layers.l2_regularizer(0.05), scope='conv1')
     

第二次调用conv2d也会使用arg_scope的默认值进行填充:

  layers.conv2d(inputs, 256, [5, 5], padding='SAME',
                  initializer=layers.variance_scaling_initializer(),
                  regularizer=layers.l2_regularizer(0.05), scope='conv2')
     

如何重用arg_scope

的示例
with arg_scope([layers.conv2d], padding='SAME',
                 initializer=layers.variance_scaling_initializer(),
                 regularizer=layers.l2_regularizer(0.05)) as sc:
    net = layers.conv2d(net, 256, [5, 5], scope='conv1')
    ....
  with arg_scope(sc):
    net = layers.conv2d(net, 256, [5, 5], scope='conv2')