web-dev-qa-db-fra.com

que fait réellement arg_scope?

Je suis un débutant dans les réseaux neuronaux et TensorFlow, et j'essaie de comprendre le rôle de arg_scope .

Il me semble que c'est une façon de rassembler un dictionnaire de "choses que vous voulez faire" sur une certaine couche avec certaines variables. S'il vous plait corrigez moi si je me trompe. Comment expliqueriez-vous exactement à quoi cela sert, à un débutant?

18
haxtar

Lorsque vous définissez des couches de convolution, vous pouvez toujours utiliser le même type de remplissage et le même initialiseur, et peut-être même la même taille de convolution. Pour vous regrouper, vous utilisez peut-être aussi toujours le même 2x2 taille de regroupement. Etc.

arg_scope est un moyen d'éviter de répéter en fournissant les mêmes arguments encore et encore aux mêmes types de calque.

Exemples de la documentation source :

Exemple d'utilisation de 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')

Le premier appel à conv2d se comportera comme suit:

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

Le deuxième appel à conv2d utilisera également le arg_scope par défaut pour le remplissage:

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

Exemple de réutilisation d'un 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