abrir tensorflow grafico desde archivo

Estoy tratando de usar tensorflow para estudiar y no comprendo cómo abrir y usar el archivo guardado al principio de mi gráfico con el tipo tf.Graph. Algo como esto:

import tensorflow as tf my_graph = tf.Graph() with g.as_default(): x = tf.Variable(0) b = tf.constant(-5) k = tf.constant(2) y = k*x + b tf.train.write_graph(my_graph, '.', 'graph.pbtxt') f = open('graph.pbtxt', "r") # Do something with "f" to get my saved graph and use it below in # tf.Session(graph=...) instead of dots with tf.Session(graph=...) as sess: tf.initialize_all_variables().run() y1 = sess.run(y, feed_dict={x: 5}) y2 = sess.run(y, feed_dict={x: 10}) print(y1, y2) 

Tienes que cargar el contenido del archivo, analizarlo a GraphDef y luego importar. Será importado en el gráfico actual. Es posible que desee envolverlo con graph.as_default(): administrador de contexto.

 import tensorflow as tf from tensorflow.core.framework import graph_pb2 as gpb from google.protobuf import text_format as pbtf gdef = gpb.GraphDef() with open('my-graph.pbtxt', 'r') as fh: graph_str = fh.read() pbtf.Parse(graph_str, gdef) tf.import_graph_def(gdef) 

Una opción: eche un vistazo al soporte de guardado / restauración de Tensorflow MetaGraph, documentado aquí: https://www.tensorflow.org/versions/r0.11/how_tos/meta_graph/index.html

Resolví este problema de esta manera: primero, nombré el cálculo necesario en el gráfico “salida” y luego guardo este modelo en el código a continuación …

 import tensorflow as tf x = tf.placeholder(dtype=tf.float64, shape=[], name="input") a = tf.Variable(111, name="var1", dtype=tf.float64) b = tf.Variable(-666, name="var2", dtype=tf.float64) y = tf.add(x, a, name="output") saver = tf.train.Saver() with tf.Session() as sess: tf.initialize_all_variables().run() print(sess.run(y, feed_dict={x: 555})) save_path = saver.save(sess, "model.ckpt", meta_graph_suffix='meta', write_meta_graph=True) print("Model saved in file: %s" % save_path) 

En segundo lugar, necesito ejecutar cierta operación en el gráfico, que conozco por nombre “salida”. Así que simplemente restauro el modelo en otro código y ejecuto mi cálculo restaurado tomando partes del gráfico necesarias con los nombres “entrada” y “salida”:

 import tensorflow as tf # Restore graph to another graph (and make it default graph) and variables graph = tf.Graph() with graph.as_default(): saver = tf.train.import_meta_graph("model.ckpt.meta") y = graph.get_tensor_by_name("output:0") x = graph.get_tensor_by_name("input:0") with tf.Session() as sess: saver.restre(sess, "model.ckpt") print(sess.run(y, feed_dict={x: 888})) # Variable out: for var in tf.all_variables(): print("%s %.2f" % (var.name, var.eval()))