2017-08-27 24 views
0

所以,我有一個架構,其中比方說,我有幾層,讓我們通過ARC1表示它:A1->A2->A3->A4->Loss1。我用一個損失函數來訓練這個架構:Loss1。Tensorflow:微調與附加層的模型,關鍵不是發現錯誤

我有一個新的架構ARC2:A1->A2->A3->A4->A5->A6->Loss2,其中A1至A4在這兩個層具有相同的名稱和A5和A6是新的層次。我想以較低的學習速度慢訓練整體架構ARC2但想從以前的培訓架構ARC1恢復A1 to A4。我試着在tensorflow實施,但我得到的錯誤:

tensorflow/core/framework/op_kernel.cc:1152] Not found: Key Arc/new_layers/A5_weights not found in checkpoint 
     [[Node: save/RestoreV2_38 = RestoreV2[dtypes=[DT_FLOAT], _device="/job:localhost/replica:0/task:0/cpu:0"](_recv_save/Const_0, save/RestoreV2_38/tensor_names, save/RestoreV2_38/shape_and_slices)]] 

這是事實,對應於新層的權重是不老的檢查點,但因爲這是一個標準的技術,這將是一個辦法做到這個?據我所知,凍結網絡將不解決這個問題,因爲我想的梯度傳播完成的一路A1(同時具有更低的學習率後學習)。

這是培養新的SOFTMAX層的標準技術,但如果你有2個或多個新的完全連接層或其他層,它應該是真的有問題?

回答

1

假設你正在恢復使用tf.train.Saver,你需要指定要在構造函數(__init__)恢復變量變量,否則會默認爲所有變量在當前圖形。

saver = tf.train.Saver(old_vars) 
with tf.Session() as sess: 
    sess.run(tf.variables_initializer(new_vars) 
    saver.restore(sess, save_path) 
相關問題