Se usó la API de Cloud Translation para traducir esta página.
Switch to English

tf.compat.v1.variable_scope

Ver código fuente en GitHub

Un gestor de contexto para definir operaciones que crea las variables (capas).

Este gestor de contexto valida que la (opcional) values son de la misma gráfica, se asegura de que el gráfico es la gráfica predeterminada, y empuja un alcance nombre y un alcance variable.

Si name_or_scope no es ninguno, se utiliza tal cual. Si name_or_scope es None, entonces default_name se utiliza. En ese caso, si el mismo nombre ha sido utilizado previamente en el mismo ámbito, se hará única añadiendo _N a ella.

Ámbito de la variable le permite crear nuevas variables y para compartir los ya creados al tiempo que proporciona controles para no crear o cuota por accidente. Para más detalles, ver el alcance variable Cómo , aquí presentamos sólo unos ejemplos básicos.

Un simple ejemplo de cómo crear una nueva variable:

 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"
 

Un simple ejemplo de cómo volver a entrar en un ámbito de variable de prefabricados de forma segura:

 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"
 

Tenga en cuenta que los contadores para default_name se desechan una vez que se sale del ámbito padre. Por lo tanto, cuando el código vuelve a entrar en el ámbito de aplicación (por ejemplo, guardándolo), se reiniciarán todos los contadores default_name anidados.

Por ejemplo:

 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!
 

Ejemplo básico de compartir una AUTO_REUSE variables:

 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
 

Ejemplo básico de compartir una variable con la reutilización = 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
 

Compartiendo una variable mediante la captura de un alcance y el establecimiento de reutilización:

 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
 

Para evitar el intercambio accidental de las variables, elevamos una excepción al conseguir una variable existente en un ámbito no reutilizar.

 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 ...").
 

Del mismo modo, elevamos una excepción al intentar conseguir una variable que no existe en el modo de reutilización.

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

Tenga en cuenta que la reuse de la bandera se hereda: si abrimos un ámbito reutilización, entonces todos sus sub-ámbitos vuelven reutilización también.

Una nota sobre el nombre de alcance: Configuración de reuse no afecta a la denominación de otras operaciones tales como mult. Véase la discusión relacionada en GitHub # 6189

Tenga en cuenta que hasta e incluyendo la versión 1.0, se le permitió (aunque desalentado explícitamente) para pasar al argumento falso reutilización, produciendo un comportamiento no documentado ligeramente diferente de Ninguno. A partir de 1.1.0 Ninguno pasa y False como la reutilización tiene exactamente el mismo efecto.

Una nota sobre el uso de variables alcances en entorno multi-hilo: alcances variables son secuencia de procesamiento local, por lo que un hilo no va a ver el alcance actual de otro hilo. Además, al utilizar default_name , nombres alcances únicos están también generan sólo en función de cada hilo. Si se utilizó el mismo nombre dentro de un subproceso diferente, eso no impide que un nuevo hilo de crear el mismo alcance. Sin embargo, la tienda variable subyacente se comparte a través de hilos (dentro del mismo gráfico). Por lo tanto, si otro subproceso intenta crear una nueva variable con el mismo nombre que una variable creado por un hilo anterior, que no falle la reutilización es verdadera.

Además, cada hilo comienza con un alcance variable de vacío. Así que si desea conservar prefijos de nombre de un ámbito desde el hilo principal, debe capturar el alcance del hilo principal y volver a introducirla en cada hilo. Por ejemplo,

 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 : el ámbito de abrir.
default_name El nombre por defecto para utilizar si el name_or_scope argumento es None , este nombre será uniquified. Si se proporciona name_or_scope no será utilizada y por lo tanto no es necesario y puede ser None.
values La lista de Tensor argumentos que se pasa a la función op.
initializer inicializador por defecto para las variables dentro de este ámbito.
regularizer regularizador por defecto para las variables dentro de este ámbito.
caching_device dispositivo de almacenamiento en caché por defecto para las variables dentro de este ámbito.
partitioner particionado por defecto para las variables dentro de este ámbito.
custom_getter captador personalizado predeterminado para las variables dentro de este ámbito.
reuse True , Ninguno o tf.compat.v1.AUTO_REUSE; Si True , de entrar en el modo de reutilización para este ámbito, así como todos los sub-ámbitos; Si tf.compat.v1.AUTO_REUSE, creamos las variables si no existen, y los devuelven lo contrario; Si ninguno, heredamos la bandera de reutilización del ámbito padre. Cuando está habilitada la ejecución ansiosos, nuevas variables siempre se crean a menos que un EagerVariableStore o plantilla está actualmente activo.
dtype tipo de variables creadas en este ámbito de aplicación (valores predeterminados para el tipo en el ámbito pasado, o heredado de alcance de los padres).
use_resource Si es falso, todas las variables serán variables regulares. Si es verdad, ResourceVariables experimentales con una semántica bien definida su lugar se utilizará. El valor predeterminado es Falso (posteriormente cambiar a True). Cuando está habilitada la ejecución ansiosos este argumento siempre se ve obligado a ser verdad.
constraint Una función de proyección opcional que debe aplicarse a la variable después de haber sido actualizado por un Optimizer (por ejemplo, utilizarse para aplicar restricciones norma o limitaciones de valor para los pesos de capa). La función debe tomar como entrada la Tensor sin proyección que representa el valor de la variable y devolver el Tensor para el valor proyectado (que debe tener la misma forma). Las restricciones no son seguros de usar cuando se hace la formación distribuida asíncrona.
auxiliary_name_scope Si True , creamos un ámbito de nombres auxiliar con el alcance. Si False , no creamos. Tenga en cuenta que el argumento no es hereditaria, y sólo entra en vigor por una vez la hora de crear. Sólo se debe utilizar para volver a entrar en un ámbito de variable de prefabricados.

ValueError cuando se trata de la reutilización dentro de un crear un espacio, o crear dentro de un ámbito reutilización.
TypeError cuando los tipos de argumentos no son apropiados.

Métodos

__enter__

Ver fuente

__exit__

Ver fuente