2016-11-06 8 views
3

多分私の質問は少し素朴ですが、私は実際にテンソルフローのドキュメントで何も見つかりませんでした。Tensorflow、特定のデバイスの変数を復元する

私は、その変数がGPUに配置された訓練されたテンソルフローモデルを持っています。今私はこのモデルを復元し、CPUを使ってテストしたいと思います。

の例のように、私は「tf.train.Saver.restore`経由でこれを行う場合:私はこれらを復元することができますどのように

InvalidArgumentError: Cannot assign a device to node 'b_fc8/b_fc8/Adam_1': Could not satisfy explicit device specification '/device:GPU:0' because no devices matching that specification are registered in this process; available devices: /job:localhost/replica:0/task:0/cpu:0

:私は、次のexcpetionを持って saver = tf.train.import_meta_graph("/tmp/graph.meta") saver.restore(session, "/tmp/model.ckp")

CPUの変数

おかげ

答えて

3

使用clear_devicesフラグ、すなわち

saver = tf.train.import_meta_graph("/tmp/graph.meta", clear_devices=True) 
+0

おかげのようなConfigProtoのDEVICE_COUNTは、 は実際にこのリソースは、バージョン '0.11'から入手可能です。 私は0.10を使用しています。 –

+0

@TiagoFreitasPereira次に、GraphDefをロードし、ノードを反復し、フィールド "device"をクリアしてから、このGraphDefをグラフにインポートすることができます。 –

+0

また、 'graph.pbtxt'をテキストエディタで開き、デバイス: ' –

0

私は(saver.restoreはまだ/ GPUに変数を割り当てるしようとしていた私と一緒に働いていなかった0.12とclear_devices=Truetf.device('/cpu:0') tensorflow使用しています: 0)。

私は実際にはGPUメモリに収まらない複数のモデルをロードしていたので、すべてを/ cpu:0に強制する必要がありました。ここでは/ CPUにすべてを強制するには、2つの選択肢です:0

  1. 設定os.environ['CUDA_VISIBLE_DEVICES']=''
  2. 使用tf.Session(config=tf.ConfigProto(device_count={"GPU": 0, "CPU": 1}))
関連する問題