MATLAB中patternnet函數返回的網絡結構中各個參數的含義


matlab中有大量與神經網絡相關的app,庫函數,...,可以很方便地進行神經網絡相關方面的學習和應用。采用app進行可視化操作,上手比較快,但是這樣往往忽視了對神經網絡本質的理解,難以根據實際應用場景合理調整神經網絡結構以及其他各個超參數,所以當對神經網絡有了一定了解之后,可以選擇采用matlab神經網絡庫函數進行處理。目前matlab里面常用的簡單的神經網路庫函數有newff和patternnet,其中newff函數可設置的參數比較多,但是它似乎更適合於處理回歸類問題(當然分類問題也可以轉化成回歸類問題進行處理),它的損失函數好像不能設置為crossentropy函數?也不能采用softmax函數作為激活函數?(不知道是真的不支持這個設置,還是我沒理解清楚,畢竟我只是一個神經網絡的門外漢)所以對分類問題的支持並不是很全面。而patternnet函數似乎是專門為分類問題而設置的,直接通過該函數手動設置的參數比較少(只有神經網絡層數,模型訓練方法和模型的損失函數),它默認的損失函數就是crossentropy函數,且要求輸入的標簽必須是one-hot編碼的形式,根據其輸出結果中各個類別的概率和加起來恆等於1,似乎可以推斷出它的輸出層的激活函數是softmax。patternnet返回訓練得到的神經網絡結構體,這個結構體包含的信息很豐富,不僅可以通過該結構體詳細了解所采用的神經網絡的各個詳細信息,而且可以通過它設置一些patternnet函數接口所不能直接設置的參數,比如設置各層的激活函數。該結構體的信息如下圖所示

 

 

 以下對這個結構體內的某些信息進行解釋說明:

name:這個表示網絡的名稱,這僅僅用於顯示,可以手動修改成任意名稱,如net.name='gggg';

numInputs:這個表示的是網絡的輸入數據集數,注意它並不是表示網絡輸入樣本的特征維數。這個參數一般設置為1;

numLayers:這個參數表示網絡的層數,不過這個網絡層數應該是不包括輸入層,這個參數是可以手動進行修改的,不過修改這個參數會對后續所有的權值、偏置等造成很大的影響,所以這個參數一般不進行修改;

numWeightElements:這個參數表示這個網絡所有的權值和偏置值的數目,設網絡從輸入層到輸出層的維數分別為那么這個參數的值可以計算為

 

 

biasConnect: 表示某一層是否有偏置值,是一個Nx1的矩陣,N表示網絡層數(不包括輸入層);

inputConnect:表示某一層是否有與輸入層連接的權值,也是NxnumInputs的矩陣;

layerConnect:表示某一層是否有來自其他層的權值,表示為NxN維矩陣;

outputConnect:表示某一層是否產生輸出,Nx1矩陣;

inputs:表示輸入的一些配置,它包括以下很多內容,其中i的取值最大為numInputs,這個cell里面的詳細內容有需要的時候再去了解;

 

 

 layers:這個參數給出了每一層(不包括輸入層)的各項設置參數,具體的參數如下圖所示

 

 

 這里面確實給出了很多有用的信息,比如說它可以查看每一層所用的transfer function,如可以通過net.layers{1}.transferFcn查看第一個隱層的transfer function(通過查看該參數可知patternnet函數隱層默認的transfer function 是'tansig',輸出層默認的transfer function 是'softmax'),也可以通過net.layers{i}.transferFcn='xxx'將第i層的transfer function設置成xxxx函數;

 

outputs:給出了與輸出層相關的一些信息,具體信息如下圖所示

 

 

 biases:這個參數給出了每層偏置相關的一些信息,具體信息如下圖所示

 

 

 inputWeights:其實不是很清楚這個參數的具體含義是什么,這個weights到底指的是什么weight?它包含以下具體信息,其中i表示網絡第i層,j表示第j個網絡輸入數據集(與numInputs對應)

 

 

 layerWeights:這個應該是指兩層之間的權值的相關信息,具體信息如下圖,其中i,j分別表示網絡的第i層和第j層;

 

 

 function模塊包含的一系列參數在實際應用中設置得比較頻繁,這里面的參數和方法針對的是整個網絡,而不是針對網絡的某部分結構,比如若設置net.trainFcn='trainscg'表示的是將整個網絡參數訓練的方法設置為scg算法,而不是某一層權值的訓練設置為scg算法。這個模塊包含的功能比較雜也比較強大,比如可以通過net.divideParam.trainRatio=0.7,....,分別設置訓練集,驗證集和測試集的比例;比如可以通過net.performFcn='mse',設置網絡的損失函數;比如可以設置訓練的步長,迭代次數、允許誤差等;比如可以可視化網絡各種性能,ROC曲線,訓練誤差,模糊矩陣等。總之這個模塊里面的參數和方法有時間需要好好研究。

 

IW,LW和b里面保存的是網絡訓練得到的最終的權值和偏置值。

最后methods模塊下面的內容其實沒有太多需要注意的地方,所以這邊就不多講。

需要注意的是要利用patternnet函數訓練得到的模型進行預測只需要采用如下格式進行:net(inputdata)。

 

 

注:某一天發現matlab里面patternnet函數的幫助文檔后面有一些推薦的閱讀材料,如下圖

 

 

 這里面有對上述結構體各個信息的詳細解釋。

 

 

 

 

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM