Tensorflowr0.12を使用しています。
私はgoogle-cloud-mlをローカルで使用して、2つの異なるトレーニングジョブを実行しています。最初の仕事では、変数の適切な初期値を見つけました。それらをV2チェックポイントに保存します。
2番目のジョブで使用するために変数を復元しようとすると:
import tensorflow as tf
sess = tf.Session()
new_saver = tf.train.import_meta_graph('../variables_pred/model.ckpt-10151.meta', clear_devices=True)
new_saver.restore(sess, tf.train.latest_checkpoint('../variables_pred/'))
all_vars = tf.trainable_variables()
for v in all_vars:
print(v.name)
次のエラーメッセージが表示されました。
tensorflow.python.framework.errors_impl.InternalError: Unable to get element from the feed as bytes.
チェックポイントは、最初のジョブで次の行を使用して作成されます。
saver = tf.train.Saver()
saver.export_meta_graph(filename=os.path.join(output_dir, 'export.meta'))
saver.save(sess, os.path.join(output_dir, 'export'), write_meta_graph=False)
この回答 によると、メタデータファイルがないことが原因である可能性がありますが、メタデータファイルを読み込んでいます。
PS:google-cloud-mlでの起動によって生成されたデバイス仕様は非常に複雑であり、必ずしも同じディスパッチを取得する必要がないため、引数clear_devices=True
を使用します。
エラーメッセージは、不注意により「checkpoint」という名前のファイルがないことが原因でした。
このファイルを適切なフォルダに再導入した後、チェックポイントのロードが機能しているように見えます。
この要点を省略してすみません。
モデルを保存するときにwrite_meta_graph = Falseを設定することが問題である可能性があると思います。結果として、実際にグラフを保存しているとは思わないので、復元しようとしても復元するグラフはありません。 write_meta_graph = Trueを設定してみてください