2017-04-23 41 views
0

我有一個模型,我需要在每N次迭代中爲權重(可訓練變量)分配新的外部值。零星地分配值給變量(佔位符vs feed_dict)

我能想到的幾個解決方案:

  1. 保存和恢復

    沒有好,因爲我需要系列化,經過一個文件系統調用等。(即使我使用的東西喜歡的tmpfs)

  2. 使用佔位符和分配操作

    我將創建一個佔位符和每個訓練的變量賦值運算。每次我想給權重分配一些東西時,我都運行了分配操作。

    但是,我知道這意味着我將被迫在每個feed_dict中考慮這些佔位符並每次傳遞虛擬值我在圖中運行任何操作。

    此外,我會使用更多的內存比需要..

  3. 使用的每個變量分配給自身訓練的變量和觸發OPS一個feed_dict?

    這是行不通的?有什麼缺點嗎?

編碼之前我認爲這是個好主意嗎? 什麼是推薦的方式來有效地分配新的外部值給變量(內存/時間)?

回答

1

您可以對佔位符使用賦值操作。

我將不得不考慮在每個feed_dict這些佔位符,並通過虛擬值,每次我在圖形運行的任何操作

此外,我會使用更多的內存比需要..

不需要。您只需在運行分配操作時將值提供給佔位符。不要將分配操作作爲訓練圖的一部分,只在您想分配新值時運行它們。

如果分配結果是一個瓶頸(小N可能會減慢你的程序),你可以考慮other methods獲取數據到TensorFlow中。

+0

我瞭解,佔位符必須飼餵所有的時間和不僅依賴於它們的操作。優秀。謝謝! – purpletentacle

+0

@ mtk99沒問題。但在另一個答案實際上是一個更好的解決方案。我不知道你可以直接喂張量。 – BlueSun

3

您的3-rd選項聽起來是最好的選擇。

您可以將值填入tensors that aren’t placeholders

TensorFlow的提要機制允許您將數據注入 計算圖中的任何張量。因此Python計算可以直接將數據 提供給圖形。

可餵食任何可張力的張量。要檢查張量是否可以輸送,請使用:tf.Graph.is_feedable(tensor)