2016-11-07 7 views
2

Tensorflowのローカルインストールを0.11rc2に更新しました。バージョン2で保存するために、保存する人にパラメータを追加する必要があるというメッセージが表示されました。この形式で保存されたモデルを読み込みます。私がモデルを走らせると、それはあらゆる時代に保存されます。保存するときは、translate.ckpt-3916translate.ckpt-3916.metaというファイルを保存していました。今度は、translate.ckpt-3916.indextranslate.ckpt-3916.meta、およびtranslate.ckpt-3916.data-000000-of-000001という2つではなく、3つのファイルが取得されます。データをロードするためにTensorflow Saver v2を使用したモデルのロード

、私は次のコードを使用しmodelはすでに私のプログラムの標準ハイパーで初期化されたモデルオブジェクトである

ckpt = tf.train.get_checkpoint_state(FLAGS.train_dir) 
    if ckpt and tf.gfile.Exists(ckpt.model_checkpoint_path): 
     print("Reading model parameters from %s" % ckpt.model_checkpoint_path) 
     model.saver.restore(session, ckpt.model_checkpoint_path) 
    else: 
     print("Created model with fresh parameters.") 
     session.run(tf.initialize_all_variables()) 
return model 

を。これはsaver v1で問題なく動作します。 ckpt.model_checkpoint_pathは、バージョンに関係なくtranslate.ckpt-3916のパスに評価されるため、チェックポイントがv2で保存されていれば、ファイルは見つかりません。

(バージョンのいずれかで保存された)そのディレクトリ内checkpointファイルの内容は以下のとおりです。

model_checkpoint_path: "translate.ckpt-3916" 
all_model_checkpoint_paths: "translate.ckpt-3916" 

はセーバーV2にデータをロードするための新しい方法がありますか?さもなければ、私はどのように私のチェックポイントを読み込むことができますか?

EDIT:if ckpt and ckpt.model_checkpoint_path:にラインif ckpt and tf.gfile.Exists(ckpt.model_checkpoint_path):を変更する が好きではthis questionに示されているさらに少し動作するようですが、その後、次のエラーがスローされます:

InvalidArgumentError (see above for traceback): Assign requires shapes of both tensors to match. lhs shape= [84] rhs shape= [98] 
[[Node: save/Assign_54 = Assign[T=DT_FLOAT, _class=["loc:@NLC/Logistic/Linear/Bias"], use_locking=true, validate_shape=true, _device="/job:localhost/replica:0/task:0/cpu:0"](NLC/Logistic/Linear/Bias, save/RestoreV2_54)]] 

答えて

2

私は私の編集に投稿された方法は、実際に正しい方法でしたこれを機能させるには私が得たエラーは、チェックポイントを作成したときとロードするときの間でデータが変更されたためです。

ちょうどif ckpt and ckpt.model_checkpoint_path:

に上記ライン if ckpt and tf.gfile.Exists(ckpt.model_checkpoint_path):を変化させることによって行われたコードでV2チェックポイントから読み込み、それが見えるようにします
関連する問題