我是神经网络和TensorFlow的初学者,我正在努力理解arg_scope
的作用。
在我看来,这是一种将你想要做的事情的字典放在一起的方法"具有某些变量的特定层。如果我错了,请纠正我。你会如何向初学者解释它究竟是什么?
答案 0 :(得分:24)
定义卷积层时,您可能始终使用相同的填充类型和相同的初始化程序,甚至可能使用相同的卷积大小。对于您的池化,也许您也总是使用相同的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')