2017-01-08 203 views
3

我正在訓練一個深度神經網絡。直接訓練整個網絡很困難,因此,我更喜歡逐層訓練。首先,我訓練一個帶有單個隱藏層的網絡。之後,我使用tf.train.Saver保存模型。接下來的時間,我通過調用恢復變量:TensorFlow中的前訓練神經網絡

saver.restore(sess, "runs/simple-model.ckpt") 

當然,這個時候,該架構已經改變,因爲我插入隱藏層和輸出層之間的一個新層,並使用了新的變量。因此,Tensorflow會拋出一個錯誤:Key not found

我的問題是:如何在Tensorflow中逐層訓練神經網絡?我希望在完整網絡的最終調整之前做到這一點。 非常感謝。

+1

'saver'構造函數接受要初始化的變量列表。所以你可以指定保存的現有變量,並手動初始化新變量 –

+0

是的,但似乎Tensorflow聲稱新變量不存在於舊圖中。我覺得Saver總是需要相同的架構。 – lenhhoxung

+0

您可以通過查看圖形('tf.get_default_graph()。as_graph_def()')仔細檢查此變量是否存在於圖中。 –

回答

1

嘗試使用共享權重來定義整個網絡。 而不是在所有圖層上進行訓練定義一個只運行所需圖層並最終保存整個網絡的功能。

2

最後,我來介紹一個簡單的解決方案。在Python中,可以使用numpy.save輕鬆保存一個numpy數組。之後,我們可以通過:numpy.load加載數組。因此,在訓練之後,我可以使用var.eval()來評估變量,將其轉換爲一個numpy數組,然後保存它。