tutorial modelo español entrenar ejemplos curso basicos python tensorflow

modelo - tensorflow python español



Restauración del modelo TensorFlow (2)

asegúrese de que la declaración de tf.train.Saver () esté con tf.Session () como sess

Estoy intentando restaurar el modelo TensorFlow. Seguí este ejemplo: http://nasdag.github.io/blog/2016/01/19/classifying-bees-with-google-tensorflow/

Al final del código en el ejemplo agregué estas líneas:

saver = tf.train.Saver() save_path = saver.save(sess, "model.ckpt") print("Model saved in file: %s" % save_path)

Se crearon dos archivos: checkpoint y model.ckpt.

En un nuevo archivo python (tomas_bees_predict.py), tengo este código:

import tensorflow as tf saver = tf.train.Saver() with tf.Session() as sess: # Restore variables from disk. saver.restore(sess, "model.ckpt") print("Model restored.")

Sin embargo, cuando ejecuto el código, aparece este error:

Traceback (most recent call last): File "tomas_bees_predict.py", line 3, in <module> saver = tf.train.Saver() File "/usr/local/lib/python2.7/site-packages/tensorflow/python/training/saver.py", line 705, in __init__ raise ValueError("No variables to save")

ValueError: sin variables para guardar

¿Hay alguna manera de leer el archivo mode.ckpt y ver qué variables se guardan? O tal vez alguien puede ayudarlo a guardar el modelo y restaurarlo según el ejemplo descrito anteriormente.

EDIT 1:

Creo que traté de ejecutar el mismo código para recrear la estructura del modelo y recibí el error. Creo que podría estar relacionado con el hecho de que el código descrito aquí no usa variables con nombre: http://nasdag.github.io/blog/2016/01/19/classifying-bees-with-google-tensorflow/

def weight_variable(shape): initial = tf.truncated_normal(shape, stddev=0.1) return tf.Variable(initial) def bias_variable(shape): initial = tf.constant(0.1, shape=shape) return tf.Variable(initial)

Así que hice este experimento. Escribí dos versiones del código (con y sin variables nombradas) para guardar el modelo y el código para restaurar el modelo.

tensor_save_named_vars.py :

import tensorflow as tf # Create some variables. v1 = tf.Variable(1, name="v1") v2 = tf.Variable(2, name="v2") # Add an op to initialize the variables. init_op = tf.initialize_all_variables() # Add ops to save and restore all the variables. saver = tf.train.Saver() # Later, launch the model, initialize the variables, do some work, save the # variables to disk. with tf.Session() as sess: sess.run(init_op) print "v1 = ", v1.eval() print "v2 = ", v2.eval() # Save the variables to disk. save_path = saver.save(sess, "/tmp/model.ckpt") print "Model saved in file: ", save_path

tensor_save_not_named_vars.py:

import tensorflow as tf # Create some variables. v1 = tf.Variable(1) v2 = tf.Variable(2) # Add an op to initialize the variables. init_op = tf.initialize_all_variables() # Add ops to save and restore all the variables. saver = tf.train.Saver() # Later, launch the model, initialize the variables, do some work, save the # variables to disk. with tf.Session() as sess: sess.run(init_op) print "v1 = ", v1.eval() print "v2 = ", v2.eval() # Save the variables to disk. save_path = saver.save(sess, "/tmp/model.ckpt") print "Model saved in file: ", save_path

tensor_restore.py:

import tensorflow as tf # Create some variables. v1 = tf.Variable(0, name="v1") v2 = tf.Variable(0, name="v2") # Add ops to save and restore all the variables. saver = tf.train.Saver() # Later, launch the model, use the saver to restore variables from disk, and # do some work with the model. with tf.Session() as sess: # Restore variables from disk. saver.restore(sess, "/tmp/model.ckpt") print "Model restored." print "v1 = ", v1.eval() print "v2 = ", v2.eval()

Esto es lo que obtengo cuando ejecuto este código:

$ python tensor_save_named_vars.py I tensorflow/core/common_runtime/local_device.cc:40] Local device intra op parallelism threads: 4 I tensorflow/core/common_runtime/direct_session.cc:58] Direct session inter op parallelism threads: 4 v1 = 1 v2 = 2 Model saved in file: /tmp/model.ckpt $ python tensor_restore.py I tensorflow/core/common_runtime/local_device.cc:40] Local device intra op parallelism threads: 4 I tensorflow/core/common_runtime/direct_session.cc:58] Direct session inter op parallelism threads: 4 Model restored. v1 = 1 v2 = 2 $ python tensor_save_not_named_vars.py I tensorflow/core/common_runtime/local_device.cc:40] Local device intra op parallelism threads: 4 I tensorflow/core/common_runtime/direct_session.cc:58] Direct session inter op parallelism threads: 4 v1 = 1 v2 = 2 Model saved in file: /tmp/model.ckpt $ python tensor_restore.py I tensorflow/core/common_runtime/local_device.cc:40] Local device intra op parallelism threads: 4 I tensorflow/core/common_runtime/direct_session.cc:58] Direct session inter op parallelism threads: 4 W tensorflow/core/common_runtime/executor.cc:1076] 0x7ff953881e40 Compute status: Not found: Tensor name "v2" not found in checkpoint files /tmp/model.ckpt [[Node: save/restore_slice_1 = RestoreSlice[dt=DT_INT32, preferred_shard=-1, _device="/job:localhost/replica:0/task:0/cpu:0"](_recv_save/Const_0, save/restore_slice_1/tensor_name, save/restore_slice_1/shape_and_slice)]] W tensorflow/core/common_runtime/executor.cc:1076] 0x7ff953881e40 Compute status: Not found: Tensor name "v1" not found in checkpoint files /tmp/model.ckpt [[Node: save/restore_slice = RestoreSlice[dt=DT_INT32, preferred_shard=-1, _device="/job:localhost/replica:0/task:0/cpu:0"](_recv_save/Const_0, save/restore_slice/tensor_name, save/restore_slice/shape_and_slice)]] Traceback (most recent call last): File "tensor_restore.py", line 14, in <module> saver.restore(sess, "/tmp/model.ckpt") File "/usr/local/lib/python2.7/site-packages/tensorflow/python/training/saver.py", line 891, in restore sess.run([self._restore_op_name], {self._filename_tensor_name: save_path}) File "/usr/local/lib/python2.7/site-packages/tensorflow/python/client/session.py", line 368, in run results = self._do_run(target_list, unique_fetch_targets, feed_dict_string) File "/usr/local/lib/python2.7/site-packages/tensorflow/python/client/session.py", line 444, in _do_run e.code) tensorflow.python.framework.errors.NotFoundError: Tensor name "v2" not found in checkpoint files /tmp/model.ckpt [[Node: save/restore_slice_1 = RestoreSlice[dt=DT_INT32, preferred_shard=-1, _device="/job:localhost/replica:0/task:0/cpu:0"](_recv_save/Const_0, save/restore_slice_1/tensor_name, save/restore_slice_1/shape_and_slice)]] Caused by op u''save/restore_slice_1'', defined at: File "tensor_restore.py", line 8, in <module> saver = tf.train.Saver() File "/usr/local/lib/python2.7/site-packages/tensorflow/python/training/saver.py", line 713, in __init__ restore_sequentially=restore_sequentially) File "/usr/local/lib/python2.7/site-packages/tensorflow/python/training/saver.py", line 432, in build filename_tensor, vars_to_save, restore_sequentially, reshape) File "/usr/local/lib/python2.7/site-packages/tensorflow/python/training/saver.py", line 191, in _AddRestoreOps values = self.restore_op(filename_tensor, vs, preferred_shard) File "/usr/local/lib/python2.7/site-packages/tensorflow/python/training/saver.py", line 106, in restore_op preferred_shard=preferred_shard) File "/usr/local/lib/python2.7/site-packages/tensorflow/python/ops/io_ops.py", line 189, in _restore_slice preferred_shard, name=name) File "/usr/local/lib/python2.7/site-packages/tensorflow/python/ops/gen_io_ops.py", line 271, in _restore_slice preferred_shard=preferred_shard, name=name) File "/usr/local/lib/python2.7/site-packages/tensorflow/python/ops/op_def_library.py", line 664, in apply_op op_def=op_def) File "/usr/local/lib/python2.7/site-packages/tensorflow/python/framework/ops.py", line 1834, in create_op original_op=self._default_original_op, op_def=op_def) File "/usr/local/lib/python2.7/site-packages/tensorflow/python/framework/ops.py", line 1043, in __init__ self._traceback = _extract_stack()

Entonces, quizás el código original (vea el enlace externo anterior) podría modificarse a algo como esto:

def weight_variable(shape): initial = tf.truncated_normal(shape, stddev=0.1) weight_var = tf.Variable(initial, name="weight_var") return weight_var def bias_variable(shape): initial = tf.constant(0.1, shape=shape) bias_var = tf.Variable(initial, name="bias_var") return bias_var

Pero entonces la pregunta que tengo: ¿es suficiente restaurar las variables weight_var y bias_var para implementar la predicción? Hice el entrenamiento en la poderosa máquina con GPU y me gustaría copiar el modelo a la computadora menos poderosa sin GPU para ejecutar las predicciones.