Path: blob/master/site/es-419/guide/variable.ipynb
25115 views
Copyright 2020 The TensorFlow Authors.
Introducción a las variables
Se recomienda usar una variable de TensorFlow para representar el estado compartido y persistente que su programa manipula. En esta guía se describe cómo crear, actualizar y gestionar instancias de tf.Variable
en TensorFlow.
Las variables se crean a través de la clase tf.Variable
y también se les da seguimiento mediante esta misma clase. Una tf.Variable
representa a un tensor cuyo valor se puede cambiar si se le ejecutan operaciones. Las operaciones (ops) específicas permiten leer y modificar los valores del tensor. Las bibliotecas de alto nivel como tf.keras
usan tf.Variable
para almacenar los parámetros del modelo.
Preparación
En este artículo se habla sobre la ubicación de las variables. Si desea ver en qué dispositivos están ubicadas sus variables, elimine los comentarios de la línea.
Creación de una variable
Para crear una variable, proporcione el valor inicial. La tf.Variable
tendrá el mismo dtype
del valor de la inicialización.
Una variable tiene el mismo aspecto que un tensor y se comporta como tal, además; de hecho, es una estructura de datos respaldada por un tf.Tensor
. Al igual que con los tensores, tienen un dtype
y una forma; y pueden exportarse a NumPy.
La mayoría de las operaciones con tensores funcionan con variables tal como se espera, a pesar de que las variables no se pueden reformar.
Tal como se describe arriba, las variables están respaldadas por tensores. El tensor se puede reasignar con tf.Variable.assign
. Si se invoca assign
, por lo común, no se asigna un tensor nuevo; en cambio, se reutiliza la memoria del tensor existente.
Si se usa una variable como un tensor en operaciones, por lo general, se operará en el tensor de respaldo.
Al crear variables nuevas a partir de variables existentes se duplican los tensores de respaldo. Dos variables no compartirán la misma memoria.
Ciclos de vida, asignación de nombres y observación
En TensorFlow basado en Python, la instancia tf.Variable
tiene el mismo ciclo de vida que otros objetos de Python. Cuando no hay referencias a una variable, se le quita la asignación automáticamente.
A las variables también se les puede asignar un nombre que puede ser útil para darles seguimiento y depurarlas. Se les puede dar el mismo nombre a dos variables diferentes.
Los nombres de las variables se conservan al guardar y cargar los modelos. Por defecto, las variables de los modelos adquirirán automáticamente nombres únicos de variables, por lo que no será necesario asignárselos uno mismo, a menos que en realidad quiera hacerlo.
A pesar de que las variables son importantes para la diferenciación, algunas no necesitarán ser diferenciadas. Se pueden desactivar los gradientes para una variable, hay que definir trainable
como falso en el momento de la creación. Un ejemplo de una variable que no necesitará gradientes es un contador de pasos de entrenamiento.
Ubicación de variables y tensores
Para un mejor desempeño, TensorFlow intentará ubicar los tensores y las variables en el dispositivo compatible más rápido, y lo hará con su dtype
. Significa que la mayoría se las variables de ubican en una GPU, en caso de que haya una disponible.
Sin embargo, se puede sobrescribir (override). En este fragmento, ubique un tensor flotante y una variable en la CPU, incluso aunque haya una GPU disponible. Al activar el registro de la ubicación del dispositivo (consulte la sección Preparación), verá dónde se ubica la variable.
Nota: A pesar de que la ubicación manual funciona, las estrategias de distribución pueden ser las opciones más convenientes y escalables para la optimización del cálculo.
Si este notebook se ejecuta en backends diferentes con o sin una GPU, verá un registro (logging) diferente. Tenga en cuenta que la ubicación del dispositivo de registro se debe activar al inicio de la sesión.
Se puede establecer la ubicación de una variable o tensor en un dispositivo y hacer el cálculo en otro. Esto agregará una demora, ya que los datos deberán copiarse entre dispositivos.
Sin embargo, probablemente quiera hacerlo de todos modos si tiene varios nodos trabajadores GPU pero solamente quiere una sola copia de las variables.
Nota: Dado que tf.config.set_soft_device_placement
se activa por defecto, aún se ejecutará, incluso aunque ejecute este código en un dispositivo sin GPU. El paso de multiplicación se producirá en la CPU.
Para más información sobre entrenamiento distribuido, consulte la guía.
Próximos pasos
Para entender cómo se usan normalmente las variables, consulte nuestra guía sobre diferenciación automática.