libreria - TensorFlow, ¿por qué hay 3 archivos después de guardar el modelo?
tensorflow español pdf (4)
Estoy restaurando incrustaciones de Word2Vec entrenadas del tutorial de Word2Vec tensorflow.
En caso de que haya creado múltiples puntos de control:
por ejemplo, los archivos creados se ven así
model.ckpt-55695.data-00000-of-00001
model.ckpt-55695.index
model.ckpt-55695.meta
prueba esto
def restore_session(self, session):
saver = tf.train.import_meta_graph(''./tmp/model.ckpt-55695.meta'')
saver.restore(session, ''./tmp/model.ckpt-55695'')
al llamar a restore_session ():
def test_word2vec():
opts = Options()
with tf.Graph().as_default(), tf.Session() as session:
with tf.device("/cpu:0"):
model = Word2Vec(opts, session)
model.restore_session(session)
model.get_embedding("assistance")
Después de leer los
docs
, guardé un modelo en
TensorFlow
, aquí está mi código de demostración:
# Create some variables.
v1 = tf.Variable(..., name="v1")
v2 = tf.Variable(..., name="v2")
...
# Add an op to initialize the variables.
init_op = tf.global_variables_initializer()
# 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)
# Do some work with the model.
..
# Save the variables to disk.
save_path = saver.save(sess, "/tmp/model.ckpt")
print("Model saved in file: %s" % save_path)
pero después de eso, encontré que hay 3 archivos
model.ckpt.data-00000-of-00001
model.ckpt.index
model.ckpt.meta
Y no puedo restaurar el modelo restaurando el archivo
model.ckpt
, ya que no existe dicho archivo.
Aqui esta mi codigo
with tf.Session() as sess:
# Restore variables from disk.
saver.restore(sess, "/tmp/model.ckpt")
Entonces, ¿por qué hay 3 archivos?
Prueba esto:
with tf.Session() as sess:
saver = tf.train.import_meta_graph(''/tmp/model.ckpt.meta'')
saver.restore(sess, "/tmp/model.ckpt")
El método de guardar TensorFlow guarda tres tipos de archivos porque almacena la
estructura
del
gráfico por
separado de los
valores
de las
variables
.
El archivo
.meta
describe la estructura del gráfico guardada, por lo que debe importarla antes de restaurar el punto de control (de lo contrario, no sabe a qué variables corresponden los valores guardados del punto de control).
Alternativamente, puedes hacer esto:
# Recreate the EXACT SAME variables
v1 = tf.Variable(..., name="v1")
v2 = tf.Variable(..., name="v2")
...
# Now load the checkpoint variable values
with tf.Session() as sess:
saver = tf.train.Saver()
saver.restore(sess, "/tmp/model.ckpt")
Aunque no hay un archivo llamado
model.ckpt
, aún se refiere al punto de control guardado con ese nombre cuando lo restaura.
Del
código fuente
saver.py
:
Los usuarios solo necesitan interactuar con el prefijo especificado por el usuario ... en lugar de cualquier nombre de ruta física.
Si entrenó a una CNN con abandono, por ejemplo, podría hacer esto:
def predict(image, model_name):
"""
image -> single image, (width, height, channels)
model_name -> model file that was saved without any extensions
"""
with tf.Session() as sess:
saver = tf.train.import_meta_graph(''./'' + model_name + ''.meta'')
saver.restore(sess, ''./'' + model_name)
# Substitute ''logits'' with your model
prediction = tf.argmax(logits, 1)
# ''x'' is what you defined it to be. In my case it is a batch of RGB images, that''s why I add the extra dimension
return prediction.eval(feed_dict={x: image[np.newaxis,:,:,:], keep_prob_dnn: 1.0})
-
metaarchivo : describe la estructura gráfica grabada, incluye GraphDef, SaverDef, etc. luego aplique
tf.train.import_meta_graph(''/tmp/model.ckpt.meta'')
, restauraráSaver
yGraph
. -
archivo de índice : es una tabla inmutable string-string (tensorflow :: table :: Table). Cada clave es el nombre de un tensor y su valor es un BundleEntryProto serializado. Cada BundleEntryProto describe los metadatos de un tensor: cuál de los archivos de "datos" contiene el contenido de un tensor, el desplazamiento en ese archivo, suma de verificación, algunos datos auxiliares, etc.
-
archivo de datos : es la colección TensorBundle, guarde los valores de todas las variables.