1

我使用RBM實現深度自動編碼器。我明白,爲了展開網絡,我們需要使用解碼器的編碼器的轉置權重。但我不確定我們應該爲解碼器使用哪種偏見。我很感激,如果有人可以爲我詳細說明或給我發送僞代碼的鏈接。使用RBM的深度自動編碼器

回答

5

我相信Geoff Hinton在his website上提供了他所有的源代碼。他是這種技術的RBM版本的最佳人選。

基本上,如果您有一個尺寸爲10000 x 100的輸入矩陣M1,其中10000是您擁有的樣本數量,100是特徵數量,並且您希望將其轉換爲50維空間,那麼您可以訓練一個受限制的boltzman機器具有維度爲101 x 50的權重矩陣,多餘的行是始終打開的偏置單位。在解碼端,你需要101×50的矩陣,從偏差中減去多餘的一行,使其成爲一個100×50的矩陣,將它轉置爲50×100,然後爲偏置單元添加另一行,使它成爲51×100。然後,您可以通過反向運行來運行整個網絡來訓練整個網絡的權重。

+0

謝謝,你的例子對我來說很清楚。所以我的展開代碼應該是正確的:對於i = 1,
:no_layers
nn.W {i} = [dbn.rbm {i} .c dbn.rbm {i} .W];
nn.W {2 * no_layers - i + 1} = [dbn.rbm {i} .b dbn.rbm {i} .W'];
結束
可能在我的代碼中應該會出現一些其他問題,因爲我在訓練前得到了非常低的錯誤,但是在微調中錯誤率很高。該模型不合適!後向傳播誤差相對較高,但逐漸減小,但在局部最小值處出現。你有什麼建議可能是什麼問題? – user1468089

+0

我很難看到你的代碼在做什麼。您能否將整個培訓代碼與反向推介相結合,以便我能更好地看到它? – aplassard

+0

順便說一句,c是隱藏的偏見,b是可見的偏見。 – user1468089