arg_scope究竟做了什么?

hax*_*tar 18 python neural-network conv-neural-network tensorflow

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

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

P-G*_*-Gn 30

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

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

源文档中的示例:

如何使用示例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')
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

如何重用的示例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')
Run Code Online (Sandbox Code Playgroud)