グラフと変数の値を含むTensorflow(0.12.0)モデルを保存しておき、後で読み込んで実行します。私はこれについてのドキュメントや他の投稿を読んだことがありますが、作業の基礎を得ることはできません。私はthis page in the Tensorflow docsから技術を使用しています。省コードが動作するようですが、負荷コードは、これを生成:コード:Tensorflowモデルを保存して読み込みます
保存単純なモデル:
myVar = tf.Variable(7.1)
tf.add_to_collection('modelVariables', myVar) # why?
init_op = tf.global_variables_initializer()
with tf.Session() as sess:
sess.run(init_op)
print sess.run(myVar)
saver0 = tf.train.Saver()
saver0.save(sess, './myModel.ckpt')
saver0.export_meta_graph('./myModel.meta')
その後、負荷およびモデルを実行します。
with tf.Session() as sess:
saver1 = tf.train.import_meta_graph('./myModel.meta')
saver1.restore(sess, './myModel.meta')
print sess.run(myVar)
を質問1エラー:
W tensorflow/core/util/tensor_slice_reader.cc:95] Could not open ./myModel.meta: Data loss: not an sstable (bad magic number): perhaps your file is in a different file format and you need to use a different restore operator?
修正方法
質問2:私はTFのドキュメント内のパターンに従うように、この行を含め ...
tf.add_to_collection('modelVariables', myVar)
...しかし、なぜその行が必要なのか? expert_meta_graph
はデフォルトでグラフ全体をエクスポートしていませんか?そうでなければ、保存する前に、グラフのすべての変数をコレクションに追加する必要がありますか?または、復元後にアクセスされる変数をコレクションに追加するだけですか? ---------------------- 更新1月12日2017 ------------------ -----------
以下のKashyapの提案に基づいて部分的に成功しましたが、まだ謎が残っています。以下のコードは、tf.add_to_collection
とtf.get_collection
を含む行を含める場合にのみですが、を使用します。これらの行がないと、 'load'モードで最後の行にエラーがスローされます。 NameError: name 'myVar' is not defined
。私の理解では、デフォルトではSaver.save
がグラフのすべての変数を保存して復元するので、コレクションで使用される変数の名前を指定する必要があるのはなぜですか?これはTensorflowの変数名をPythonの名前にマッピングすることと関係がありますが、ここでのゲームのルールは何ですか?どの変数に対してこれを行う必要がありますか?
mode = 'load' # or 'save'
if mode == 'save':
myVar = tf.Variable(7.1)
init_op = tf.global_variables_initializer()
saver0 = tf.train.Saver()
tf.add_to_collection('myVar', myVar) ### WHY NECESSARY?
with tf.Session() as sess:
sess.run(init_op)
print sess.run(myVar)
saver0.save(sess, './myModel')
if mode == 'load':
with tf.Session() as sess:
saver1 = tf.train.import_meta_graph('./myModel.meta')
saver1.restore(sess, tf.train.latest_checkpoint('./'))
myVar = tf.get_collection('myVar')[0] ### WHY NECESSARY?
print sess.run(myVar)
[Tensorflow:以前に保存したモデル(python)を復元する方法](http://stackoverflow.com/questions/33759623/tensorflow-how-to-restore-a-previously-save-model-python ) – Kashyap