optimizer learning python tensorflow

python - learning - Tensorflow: utilizando el optimizador de Adam



tensor flow adam optimizer (5)

Estoy experimentando con algunos modelos simples en tensorflow, incluido uno que se parece mucho al primer ejemplo de MNIST para ML Beginners , pero con una dimensionalidad algo mayor. Puedo usar el optimizador de gradiente de descenso sin problemas, obteniendo una convergencia lo suficientemente buena. Cuando intento usar el optimizador de ADAM, obtengo errores como este:

tensorflow.python.framework.errors.FailedPreconditionError: Attempting to use uninitialized value Variable_21/Adam [[Node: Adam_2/update_Variable_21/ApplyAdam = ApplyAdam[T=DT_FLOAT, use_locking=false, _device="/job:localhost/replica:0/task:0/cpu:0"](Variable_21, Variable_21/Adam, Variable_21/Adam_1, beta1_power_2, beta2_power_2, Adam_2/learning_rate, Adam_2/beta1, Adam_2/beta2, Adam_2/epsilon, gradients_11/add_10_grad/tuple/control_dependency_1)]]

donde la variable específica que se queja de no inicializarse cambia según la ejecución. ¿Qué significa este error? ¿Y qué sugiere que está mal? Parece que ocurre independientemente de la velocidad de aprendizaje que uso.


Estaba teniendo un problema similar. (No hay problemas para entrenar con el optimizador GradientDescent, pero se genera un error cuando se usa con Adam Optimizer, o cualquier otro optimizador con sus propias variables)

Cambiar a una sesión interactiva resolvió este problema para mí.

sess = tf.Session()

dentro

sess = tf.InteractiveSession()


La clase AdamOptimizer crea variables adicionales, llamadas "slots", para contener valores para los acumuladores "m" y "v".

Consulte la fuente aquí si tiene curiosidad, en realidad es bastante legible: https://github.com/tensorflow/tensorflow/blob/master/tensorflow/python/training/adam.py#L39 . Otros optimizadores, como Momentum y Adagrad, también usan ranuras.

Estas variables deben inicializarse antes de que pueda formar un modelo.

La forma normal de inicializar variables es llamar a tf.initialize_all_variables() que agrega ops para inicializar las variables presentes en el gráfico cuando se tf.initialize_all_variables() .

(Aparte: a diferencia de lo que sugiere su nombre, initialize_all_variables () no inicializa nada, solo agrega operaciones que inicializarán las variables cuando se ejecuten).

Lo que debe hacer es invocar initialize_all_variables () después de haber agregado el optimizador:

...build your model... # Add the optimizer train_op = tf.train.AdamOptimizer(1e-4).minimize(cross_entropy) # Add the ops to initialize variables. These will include # the optimizer slots added by AdamOptimizer(). init_op = tf.initialize_all_variables() # launch the graph in a session sess = tf.Session() # Actually intialize the variables sess.run(init_op) # now train your model for ...: sess.run(train_op)



ejecuta init después de AdamOptimizer, y sin definir init antes o ejecutar init

sess.run (tf.initialize_all_variables ())

o

sess.run (tf.global_variables_initializer ())


FailedPreconditionError: Intentar utilizar un valor no inicializado es uno de los errores más frecuentes relacionados con tensorflow. De la documentación oficial, FailedPreconditionError

Esta excepción se plantea con mayor frecuencia cuando se ejecuta una operación que lee un tf.Variable antes de que se haya inicializado.

En su caso, el error incluso explica qué variable no se inicializó: Attempting to use uninitialized value Variable_1 . Uno de los tutoriales de TF explica mucho sobre las variables, su creation/initialization/saving/loading

Básicamente para inicializar la variable tienes 3 opciones:

Casi siempre uso el primer acercamiento. Recuerde que debe ponerlo dentro de una sesión de ejecución. Entonces obtendrás algo como esto:

with tf.Session() as sess: sess.run(tf.global_variables_initializer())

Si tiene curiosidad acerca de más información acerca de las variables, lea esta documentación para saber cómo report_uninitialized_variables y verificar is_variable_initialized .