2016-11-06 134 views
3

也許我的問題有點天真,但我在tensorflow文檔中找不到任何東西。Tensorflow,在特定設備中恢復變量

我有一個訓練過的tensorflow模型,其中的變量放在GPU中。現在我想恢復這個模型並使用CPU進行測試。

如果我這樣做,通過「tf.train.Saver.restore`作爲例子: saver = tf.train.import_meta_graph("/tmp/graph.meta") saver.restore(session, "/tmp/model.ckp")

我有以下錯誤時拋出:

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

我怎樣才能讓這些恢復CPU中的變量?

感謝

回答

3

使用clear_devices標誌,即

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

感謝DEVICE_COUNT, 其實這個資源是可用的版本'0.11'。 我使用0.10。 –

+0

@TiagoFreitasPereira,然後你可以加載GraphDef,遍歷節點,清除字段「設備」,然後將這個GraphDef導入到你的圖中 –

+0

也可以在文本編輯器中打開'graph.pbtxt',並刪除每一行以'設備:' –

0

我使用tensorflow 0.12和clear_devices=Truetf.device('/cpu:0')不和我一起工作(saver.restore仍試圖分配變量/ GPU: 0)。

我真的需要強制一切到/ cpu:0,因爲我加載了幾個模型,無論如何不適合GPU內存。這裏有兩個備選方案,以強制所有內容/ CP​​U:0

  1. os.environ['CUDA_VISIBLE_DEVICES']=''
  2. 使用ConfigProto像tf.Session(config=tf.ConfigProto(device_count={"GPU": 0, "CPU": 1}))