2016-11-22 62 views
0

私はtensorflowを使ったテキスト分類に関するwildmlブログに従っています。私は次のようにdefでグラフを保存するためにコードを変更しました:グラフのdefを.pbファイルから復元する際のTensorflowエラー

tf.train.write_graph(sess.graph_def,'./DeepLearn/model/','train.pb', as_text=False) 

その後、次のように私は、グラフを復元しています別のファイルに:

with tf.gfile.FastGFile(os.path.join('./DeepLearn/model/','train.pb'), 'rb') as f: 
    graph_def = tf.GraphDef() 
    graph_def.ParseFromString(f.read()) 
    _ = tf.import_graph_def(graph_def, name='') 
with tf.Session() as sess: 
    t = sess.graph.get_tensor_by_name('embedding/W:0') 
    sess.run(t) 

私はテンソルを実行し、その値を取得しようとすると、 、私は次のエラーを取得しています:

tensorflow.python.framework.errors.FailedPreconditionError: Attempting to use uninitialized value embedding/W 

このエラーの原因として何ができますか。テンソルは、保存されたグラフから復元するときに初期化されているはずです。

+0

'sess.run(tf.initialize_all_variables())'? – sygi

+0

しかし、私は以前に保存されたグラフからテンソルをロードしているので、この文を使用して初期化する必要はないと思います。 – Nitin

+1

変数を初期化する必要があります。グラフの値を読み取るのは変数の値ではなくグラフ自体を復元するだけなので、変数を初期化する必要があります。チェックポイントからロードする必要がある変数の値を復元したい場合。 –

答えて

0

ありがとうアレクサンドル! はい、グラフ(.pbファイル)と重み(チェックポイントファイルから読み込む)の両方をロードする必要があります。次のサンプルコード(ブログから取ったもの)を使用してくれました。

with tf.Session() as persisted_sess: 
    print("load graph") 
    with gfile.FastGFile("/tmp/load/test.pb",'rb') as f: 
     graph_def = tf.GraphDef() 
     graph_def.ParseFromString(f.read()) 
     persisted_sess.graph.as_default() 
     tf.import_graph_def(graph_def, name='') 
    persisted_result = persisted_sess.graph.get_tensor_by_name("saved_result:0") 
    tf.add_to_collection(tf.GraphKeys.VARIABLES,persisted_result) 
    try: 
     saver = tf.train.Saver(tf.all_variables()) 
    except:pass 
     print("load data") 
    saver.restore(persisted_sess, "checkpoint.data") # now OK 
    print(persisted_result.eval()) 
    print("DONE") 
関連する問題