web-dev-qa-db-ja.com

arg_scopeは実際に何をしますか?

私はニューラルネットとTensorFlowの初心者であり、 arg_scope

「やりたいこと」の辞書を特定の変数を持つ特定の層にまとめる方法だと私には思えます。私が間違っている場合は修正してください。それが何であるか、初心者にどのように正確に説明しますか?

18
haxtar

畳み込み層を定義するときは、常に同じパディングタイプと同じイニシャライザを使用でき、同じ畳み込みサイズを使用することもできます。プーリングについては、おそらく同じ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の2回目の呼び出しでも、パディングに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')
30
P-Gn