arg_scope实际上是做什么的?

23

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

在我看来,它似乎是将 "你想要做的事情" 的字典与某个具有特定变量的层放在一起的一种方式。如果我理解有误,请纠正我。您会如何向初学者解释它的实际作用呢?

1个回答

41

在定义卷积层时,您可能总是使用相同的填充类型和相同的初始化程序,甚至可能使用相同的卷积大小。对于池化,您可能也总是使用相同的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')

第一次调用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')

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接