2017-05-29 10 views
3

私はテンソルフローモデルを持っていますが、これには.metaとチェックポイントファイルがあります。モデルの作成方法を知らなくてもinput feed_dictを作成できるように、モデルを構築するコードを見ずに、モデルが必要とするすべてのプレースホルダを出力しようとしています。私は上記のように、すべての変数を印刷する際の基準については、ここではモデル構築のコードは、(別のファイルに)あるTensorflowはメタグラフからすべてのプレースホルダ変数名を出力します

def save(): 
    import tensorflow as tf 
    v1 = tf.placeholder(tf.float32, name="v1") 
    v2 = tf.placeholder(tf.float32, name="v2") 
    v3 = tf.multiply(v1, v2) 
    vx = tf.Variable(10.0, name="vx") 
    v4 = tf.add(v3, vx, name="v4") 
    saver = tf.train.Saver() 
    sess = tf.Session() 
    sess.run(tf.initialize_all_variables()) 
    sess.run(vx.assign(tf.add(vx, vx))) 
    result = sess.run(v4, feed_dict={v1:12.0, v2:3.3}) 
    print(result) 
    saver.save(sess, "./model_ex1") 

今、別のファイルに、私は、しかし

def restore(): 
    import tensorflow as tf 
    saver = tf.train.import_meta_graph("./model_ex1.meta") 
    print(tf.get_default_graph().get_all_collection_keys()) 
    for v in tf.get_default_graph().get_collection("variables"): 
     print(v) 
    for v in tf.get_default_graph().get_collection("trainable_variables"): 
     print(v) 
    sess = tf.Session() 
    saver.restore(sess, "./model_ex1") 
    result = sess.run("v4:0", feed_dict={"v1:0": 12.0, "v2:0": 4.0}) 
    print(result) 

を復元するために、次のコードを持っています私はどこでも変数名として "v1:0"と "v2:0"が表示されません。モデルを作成するためのコードを見ずにプレースホルダーのテンソル名を特定する方法唯一tf.Variableオブジェクトは"variables"(又は"trainable_variables")コレクションに追加されるのに対し、

答えて

3

テンソルv1:0v2:0は、tf.placeholder() OPSから作成されました。あなたのオプションがあるのでtf.placeholder() OPSが、追加されたへの一般的なコレクションがありません:

  1. は、元のグラフを構築する際にtf.add_to_collection()を使用して(コレクションにtf.placeholder() OPSを追加するには、より多くのメタデータを追加する必要があるかもしれませんために。プレースホルダを使用する方法を提案し

  2. 使用[x for x in tf.get_default_graph().get_operations() if x.type == "PlaceholderV2"]あなたがメタグラフをインポートした後、プレースホルダOPSのリストを取得するには

+1

第二の溶液は、実際に私のために動作しません:「O peration 'オブジェクトには属性' op 'がありません。これは、テンソルフロー1.2.1とPython 3.6を使用しています。 – buechel

+0

あなたは絶対に正しいです!適切な['Operation.type'](https://www.tensorflow.org/api_docs/python/tf/Operation#type)プロパティを使用するように変更しました。 – mrry

+0

このデフォルトのコレクションの非対称性(プレースホルダーが自動的にコレクションに追加されない)の理由はありますか?リロードされたモデルを実行するには、プレースホルダを復元できるように思えます。 – Alex

関連する問題