我是神经网络和TensorFlow的初学者,正在努力理解arg_scope
的作用。
在我看来,它似乎是将 "你想要做的事情" 的字典与某个具有特定变量的层放在一起的一种方式。如果我理解有误,请纠正我。您会如何向初学者解释它的实际作用呢?
我是神经网络和TensorFlow的初学者,正在努力理解arg_scope
的作用。
在我看来,它似乎是将 "你想要做的事情" 的字典与某个具有特定变量的层放在一起的一种方式。如果我理解有误,请纠正我。您会如何向初学者解释它的实际作用呢?
在定义卷积层时,您可能总是使用相同的填充类型和相同的初始化程序,甚至可能使用相同的卷积大小。对于池化,您可能也总是使用相同的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')