2016-10-28 2 views
1

Я пытаюсь использовать тензорный поток для изучения, и я не знаю, как открыть и использовать сохраненный в начале файла мой график с типом tf.Graph. Что-то вроде этого:открыть график тензорного потока из файла

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) 
+0

Я искал это. И эта ссылка помогла мне https://github.com/irfansharif/tensorflow/blob/master/converter.py В основном мы должны использовать text_format.Merge из пакета goob protobuf для преобразования файла pbtxt в файл graphdef –

ответ

0

Я решил эту проблему таким образом: во-первых, я назвать необходимый расчет в моей графе «выходной» и затем сохранить эту модель в коде ниже ...

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) 

во-вторых, мне нужно запустить определенную операцию в графике, что я знаю по имени «выход». Поэтому я просто восстанавливаю модель в другом коде и запускаю восстановленный расчет, беря необходимые графы с именами «ввод» и «вывод»:

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.restore(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())) 
0

Необходимо загрузить содержимое файла, проанализировать его на GraphDef и затем импортировать. Он будет импортирован в текущий график. Вы можете обернуть его с помощью менеджера контекста graph.as_default():.

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) 
+1

ParseFromString берет двоичный файл за описание [здесь] (https://www.tensorflow.org/extend/tool_developers/), в частности: «Сам API может быть немного запутанным - двоичный вызов на самом деле является ParseFromString(), тогда как вы используете функция утилиты из модуля text_format для загрузки текстовых файлов. " – RobR

+0

Я пропустил, что файл находится в текстовом формате. Благодаря! –

Смежные вопросы