Questa pagina è stata tradotta dall'API Cloud Translation.
Switch to English

tf.compat.v1.variable_scope

Visualizza sorgente su GitHub

Un manager contesto per definire ops che crea variabili (strati).

Questo contesto Manager convalida che i (opzionale) values provengono stesso grafico, assicura che il grafico è il grafico predefinito, e spinge un ambito nome e una portata variabile.

Se name_or_scope non è None, è usato come è. Se name_or_scope è None, allora default_name viene utilizzato. In tal caso, se lo stesso nome è stato precedentemente utilizzato nello stesso ambito, sarà reso univoco aggiungendo _N ad esso.

portata variabile consente di creare nuove variabili e di condividere quelle già create, fornendo controlli di non creare o quote per caso. Per i dettagli, consultare il Mirino variabile Come , qui vi presentiamo solo alcuni esempi di base.

Semplice esempio di come creare una nuova variabile:

 with tf.compat.v1.variable_scope("foo"):
    with tf.compat.v1.variable_scope("bar"):
        v = tf.compat.v1.get_variable("v", [1])
        assert v.name == "foo/bar/v:0"
 

Semplice esempio di come rientrare una portata variabile premade in modo sicuro:

 with tf.compat.v1.variable_scope("foo") as vs:
  pass

# Re-enter the variable scope.
with tf.compat.v1.variable_scope(vs,
                       auxiliary_name_scope=False) as vs1:
  # Restore the original name_scope.
  with tf.name_scope(vs1.original_name_scope):
      v = tf.compat.v1.get_variable("v", [1])
      assert v.name == "foo/v:0"
      c = tf.constant([1], name="c")
      assert c.name == "foo/c:0"
 

Tenete a mente che i contatori per default_name vengono scartate una volta il campo di applicazione genitore si esce. Pertanto quando il codice rientra nel campo di applicazione (ad esempio salvandolo), verranno riavviati tutti i contatori default_name nidificate.

Per esempio:

 with tf.compat.v1.variable_scope("foo") as vs:
  with tf.compat.v1.variable_scope(None, default_name="bar"):
    v = tf.compat.v1.get_variable("a", [1])
    assert v.name == "foo/bar/a:0", v.name
  with tf.compat.v1.variable_scope(None, default_name="bar"):
    v = tf.compat.v1.get_variable("b", [1])
    assert v.name == "foo/bar_1/b:0"

with tf.compat.v1.variable_scope(vs):
  with tf.compat.v1.variable_scope(None, default_name="bar"):
    v = tf.compat.v1.get_variable("c", [1])
    assert v.name == "foo/bar/c:0"   # Uses bar instead of bar_2!
 

Esempio di base di condivisione di un AUTO_REUSE variabile:

 def foo():
  with tf.compat.v1.variable_scope("foo", reuse=tf.compat.v1.AUTO_REUSE):
    v = tf.compat.v1.get_variable("v", [1])
  return v

v1 = foo()  # Creates v.
v2 = foo()  # Gets the same, existing v.
assert v1 == v2
 

Esempio di base di condivisione di una variabile con il riutilizzo = TRUE:

 with tf.compat.v1.variable_scope("foo"):
    v = tf.compat.v1.get_variable("v", [1])
with tf.compat.v1.variable_scope("foo", reuse=True):
    v1 = tf.compat.v1.get_variable("v", [1])
assert v1 == v
 

La condivisione di una variabile catturando una portata e l'impostazione riuso:

 with tf.compat.v1.variable_scope("foo") as scope:
    v = tf.compat.v1.get_variable("v", [1])
    scope.reuse_variables()
    v1 = tf.compat.v1.get_variable("v", [1])
assert v1 == v
 

Per prevenire la condivisione accidentale di variabili, solleviamo un'eccezione quando ottiene una variabile esistente in un ambito non-riutilizzo.

 with tf.compat.v1.variable_scope("foo"):
    v = tf.compat.v1.get_variable("v", [1])
    v1 = tf.compat.v1.get_variable("v", [1])
    #  Raises ValueError("... v already exists ...").
 

Allo stesso modo, abbiamo sollevare un'eccezione quando si cerca di ottenere una variabile che non esiste in modalità di riutilizzo.

 with tf.compat.v1.variable_scope("foo", reuse=True):
    v = tf.compat.v1.get_variable("v", [1])
    #  Raises ValueError("... v does not exists ...").
 

Si noti che il reuse flag viene ereditato: se apriamo un ambito riutilizzo, allora tutti i suoi sotto-campi diventano riutilizzo pure.

Una nota sul nome scoping: Impostazione reuse non influisce la nomina di altri ops, come mult. Vedere spiegazioni dettagliate sulla GitHub # 6189

Si noti che fino al versione 1.0, è stato permesso (anche se esplicitamente scoraggiato) per passare False per l'argomento riutilizzo, ottenendo un comportamento non documentato leggermente diverso da Nessuno. A partire da 1.1.0 passaggio None e falso il riutilizzo ha esattamente lo stesso effetto.

Una nota sull'utilizzo variabile ambiti in ambiente multi-threaded: ambiti variabili sono thread locale, quindi un thread non vedrà ambito corrente di un altro filo. Inoltre, quando si utilizza default_name , nomi Mirini unici sono generati anche solo su una base per thread. Se lo stesso nome è stato usato in un thread diverso, ciò non esclude un nuovo filo di creare la stessa portata. Tuttavia, il negozio variabile sottostante è condiviso tra fili (all'interno dello stesso grafico). In quanto tale, se un altro thread tenta di creare una nuova variabile con lo stesso nome di una variabile creata da un thread precedente, fallirà a meno che il riutilizzo è True.

Inoltre, ciascun filo inizia con una portata variabile vuota. Quindi, se si desidera conservare i prefissi di nome da un ambito dal thread principale, si dovrebbe cogliere la portata del thread principale e reinserirla in ogni thread. per esempio,

 main_thread_scope = variable_scope.get_variable_scope()

# Thread's target function:
def thread_target_fn(captured_scope):
  with variable_scope.variable_scope(captured_scope):
    # .... regular code for this thread


thread = threading.Thread(target=thread_target_fn, args=(main_thread_scope,))
 

name_or_scope string o VariableScope : lo scopo di aprire.
default_name Il nome predefinito da utilizzare se il name_or_scope argomento è None , questo nome sarà uniquified. Se viene fornito name_or_scope non saranno utilizzati e quindi non è necessario e può essere None.
values L'elenco dei Tensor argomenti che vengono passati alla funzione op.
initializer predefinito inizializzatore per le variabili all'interno di questo ambito.
regularizer regolarizzatore predefinito per le variabili all'interno di questo ambito.
caching_device Dispositivo caching predefinito per le variabili entro questo ambito.
partitioner partizionamento predefinito per le variabili all'interno di questo ambito.
custom_getter getter personalizzato predefinito per le variabili all'interno di questo ambito.
reuse True , nessuno, o tf.compat.v1.AUTO_REUSE; se True , andiamo in modalità di riutilizzo di questo ambito, così come tutti i sotto-campi; se tf.compat.v1.AUTO_REUSE, creiamo variabili se non esistono, e restituirli in altro modo; Se nessuno, ereditiamo la bandiera riutilizzo del campo di applicazione genitore. Quando l'esecuzione desiderosi è abilitata, nuove variabili sono sempre create a meno che un EagerVariableStore o un modello è attualmente attivo.
dtype tipo di variabili create in questo ambito (default è il tipo nel campo di applicazione passato, o ereditato da portata genitore).
use_resource Se False, tutte le variabili saranno variabili regolari. Se Vero, ResourceVariables sperimentali con una semantica ben definiti saranno utilizzati al posto. L'impostazione predefinita è False (saranno poi passare a True). Quando l'esecuzione desideroso è attivato questo argomento è sempre costretto per essere vero.
constraint Una funzione di proiezione opzionale da applicare alla variabile dopo l'aggiornamento da un Optimizer (ad esempio utilizzati per implementare vincoli NORM o vincoli dei valori per i pesi di livello). La funzione deve prendere in ingresso il Tensor non proiettato rappresenta il valore della variabile e restituire il Tensor per il valore previsto (che deve avere la stessa forma). I vincoli non sono sicuri da usare quando si fa formazione distribuito asincrono.
auxiliary_name_scope Se True , creiamo un ambito nome ausiliario con lo scopo. Se False , non ci creiamo. Si noti che l'argomento non è ereditaria, e richiede solo l'effetto di una volta durante la creazione. Si dovrebbe usare solo per ri-entrare in un ambito variabile premade.

ValueError quando si cerca di riutilizzare all'interno di un ambito di creare, o di creare all'interno di un ambito riutilizzo.
TypeError quando i tipi di alcuni argomenti non sono appropriati.

metodi

__enter__

Vedi la fonte

__exit__

Vedi la fonte