2017-05-07 118 views
0

我想使用RBM預訓練Hinton紙張代碼的權重MATLAB本地前饋網絡工具箱的權重。 任何人都可以幫助我如何設置或安排feedforwardnet的預訓練體重?RBM預訓練Hinton紙張代碼權重的MATLAB本地前饋網絡工具箱

例如,我使用Hinton的代碼從http://www.cs.toronto.edu/~hinton/MatlabForSciencePaper.html

和使用預訓練的權重爲MATLAB feedforwardnet。

W=hintonRBMpretrained; 

net=feedforwardnet([700 300 200 30 200 300 700]); 

net.setwb(net,W); 

如何設置或排列W,使其匹配前饋網絡結構?我知道如何使用單個矢量,但恐怕訂單或權重序列不正確。

+0

歡迎來到SO。請閱讀這個[how-to-ask](http://stackoverflow.com/help/how-to-ask)並遵循那裏的指導原則,用附加信息來完善您的問題,例如代碼和錯誤消息來描述您的編程問題。 – thewaywewere

回答

0

MATLAB feedforwardnet函數返回一個神經網絡對象具有documentation中所述的屬性。與前訓練的權重創建一個神經網絡的工作流程如下:

  1. 加載數據
  2. 創建網絡
  3. 配置網絡
  4. 初始化重量和偏見
  5. 列車網絡

步驟1,2,3和5與從零開始創建神經網絡時的步驟完全相同。讓我們在一個簡單的例子看:

% 1. Load data 
load fisheriris 
meas = meas.'; 
species = species.'; 
targets = dummyvar(categorical(species)); 

% 2. Create network 
net = feedforwardnet([16, 16]); 

% 3. Configure the network 
configure(net, meas, targets) 

現在,我們有一個神經網絡net帶有4個輸入(萼片和花瓣長度和寬度),和3個輸出(「setosa」,「雲芝」和「錦葵」 )。我們有兩個隱藏層,每層都有16個節點。權重被存儲在兩個字段net.IWnet.LW,其中IW NPUT 瓦特八分,並LW艾爾瓦特八分:

>> net.IW 
ans = 
    3×1 cell array 

    [16×4 double] 
    [] 
    [] 

>> net.LW 
ans = 
    3×3 cell array 

       []    [] [] 
    [16×16 double]    [] [] 
       [] [3×16 double] [] 

這在第一混淆,但有意義:這兩個單元格陣列中的每一行都對應於我們所擁有的其中一個圖層。

IW數組中,我們有輸入和每個圖層之間的權重。顯然,我們只在輸入和第一層之間有權重。這個權重矩陣的形狀是16x4,因爲我們有4輸入和16隱藏單位。

LW陣列,我們有重物各層(各行)每個層(列)。在我們的例子中,第一層到第二層的權重矩陣爲16x16,第二層的權重矩陣爲3x16。理所當然,對嗎?

就這樣,我們知道如何初始化我們從RBM代碼得到的權重:

net.IW{1,1} = weights_input; 
net.LW{2,1} = weights_hidden; 

有了這一點,你可以用第5步,即在監督方式訓練網絡繼續。

+0

感謝您的回覆。但問題是我不知道預訓練中的權重順序。恐怕重量會減少,或者重量大小與前饋網絡權重相同。 –

+0

我做的是我設置'vishid'作爲輸入權重而不改變順序。 –