2017-05-08 49 views
0

最近,我正在考慮創建一個定製的神經網絡。基本結構與通常情況相同,但我想截斷圖層之間的連接。例如,如果我構建了一個帶有兩個隱藏層的網絡,我想刪除一些權重並保留其他權限,如下圖所示: Structure of customized neural networks 對不起,我無法在此處嵌入圖片,僅鏈接。在培訓期間修復神經網絡中的子集權重

這不是退出以避免過度擬合。實際上,剩下的重量(連接)是指定和固定的。相應的結構是故意設計的。

python有沒有辦法做到這一點? Tensorflow,pytorch,theano或其他模塊?

回答

0

是的,你可以在tensorflow中做到這一點。

你會在你的tensorflow代碼一些東西像層如此:

m = tf.Variable([width,height] , dtype=tf.float32 )) 
b = tf.Variable([height] , dtype=tf.float32 )) 
h = tf.sigmoid(tf.matmul(x,m) + b) 

你需要的是一些新的矩陣,我們稱之爲ķ對殺。它會殺死特定的神經聯繫。神經連接定義於m。這將是你的新配置

k = tf.Constant(kill_matrix , dtype=tf.float32) 
m = tf.Variable([width,height] , dtype=tf.float32 ) 
b = tf.Variable([height] , dtype=tf.float32 ) 
h = tf.sigmoid(tf.matmul(x, tf.multiply(m,k)) + b) 

你的kill_matrix是1和0的矩陣。爲每個想要保留的神經連接插入一個1,併爲每個想要殺死的人插入一個0。

+0

謝謝。殺死矩陣看起來不錯。它激勵着我。我會嘗試。 – Yuan

+0

請問另一個問題?這個修改會影響優化器,就像Adam一樣嗎?根據我的理解,我們使用反向傳播來更新權重。現在我們截斷連接,反向傳播會更新被殺死的權重,這對前饋過程沒有影響。或者我可以解釋這個操作,因爲更新會發生,但對前饋處理沒有影響。 – Yuan

+0

接下來,爲了清晰起見,* kill層*應該被稱爲* gate層*或* suppress層*。要回答你關於Adam(或任何其他優化器)的問題,答案是**,這不會對優化器**產生負面影響。 *抑制層*將使用抑制(或** **)連接抑制前饋和反向傳播步驟。 – Wontonimo