2016-07-04 160 views
0

我在張量流中恢復模型的保存參數。我想爲具有不同圖層和不同參數大小的模型配置測試差異。如何在修改過的參數和模型中恢復TensorFlow的檢查點?

例如,如果我的參數之一是我救是這樣的: W_conv1 = weight_variable([7 , 7, 1, 64])

,如果我恢復這一點,它的工作原理;但我想改變我的參數是這樣的: W_conv1 = weight_variable([5 , 5, 1, 64])W_conv1 = weight_variable([5 , 5, 1, 50])W_conv1 = weight_variable([9 , 9, 1, 80]) 或...。

現在我想用我保存的檢查點在新配置中恢復。如果參數的每個維度的大小發生了變化,它將從我保存的參數中隨機初始化,並提醒位置隨機初始化。

是否可以在tensorflow中做到這一點?

+0

可以在'tf.train.saver'中使用'reshape = True'嗎? – Tavakoli

回答

0

TensorFlow爲操作員提供了一個現有變量的切片(tf.slice),還提供了操作員爲現有變量(tf.assign)分配值(可能是切片)。所以,你想要什麼可以通過以下步驟來實現:

  • 從檢查點
  • 創建新的形狀不同的變量恢復舊的變量,隨機初始化
  • 將您的舊變量的相關片新變量

舉例來說,如果你的舊變量的形狀[7, 7, 1, 64]和你的新變量的形狀[5, 5, 1, 64],這裏是切片舊變量並分配到新variabl食譜e:

# old_variable has the shape [7, 7, 1, 64] 
new_variable = tf.Variable(np.random.rand(5, 5, 1, 64)) 
assign_new_var = tf.assign(new_variable, old_variable([:5, :5, :, :])) 
+0

當我使用這個代碼'tf.assign(tf.Variable(tf.truncated_normal([7200,1000],stddev = std)),W_fc1)'它會產生錯誤:'ValueError:Shapes(7200,1000)and(7200 ,150)是不兼容的,其中W_fc1 = weight_variable([7200,150])' – Tavakoli

+0

如果您試圖將'7200 x 150'張量分配給'7200 x 1000'變量,*和*變量爲'7200 x 100',那麼您需要使用['tf.pad()'](https://www.tensorflow.org/api_docs/python/tf/pad)將其轉換爲正確的大小。 – mrry

相關問題