2017-11-26 20:31
RNN(反饋式神經網絡),即前面構建的那幾個網絡。由於它們都是反覆使用相同的方法構建的神經網絡,既費力又費時,鑑於每次構建的基本步驟都一樣,於是我把構建的操作函數化,只要提供相應的參數,讓計算機自動生成合適的神經網絡。
代碼在最後,封裝成的函數命名爲“RNN”, 共有5個參數:
RNN( X , Y , M , ALPHA , L)
X指定輸入層,目前只支持一位數組,默認爲[0];
Y指定理想值,一維數組,默認爲[0];
M指定訓練次數,默認爲0;
ALPHA指定學習率(步長),默認爲0.5;
L是網絡層數即每層的單元數,是一維數組,默認爲[0],比如L=[10,5,4,3,2],指定隱含層有5層,每層的神經元數量分別爲10、5、4、3、2,加上輸入輸出(X和Y),這樣神經網絡就有7層。
w、b的取值均爲隨機數。
使用tanh函數爲激活函數,運行結果表明,tanh的確比sigma函數效果更好:
激活函數:f(x)=tanh(x);它的導數:f'(x)=1-tanh(x)*tanh(x)
激活函數:sigma(x)=1/(1+e^(-x));它的導數:sigma'(x)=sigma(x)*(1-sigma(x))
現在,嘗試比較一下現在函數化的神經網絡和之前構建的網絡,假設輸入層x=[10,20,30];y=0.23:
使用之前的四層神經網絡,RNN()配置成和它一樣的結構,運行結果如下:
(上面爲原四層神經網絡,下面爲RNN())
可以看出,使用了tanh函數的RNN()要比之前使用sigma函數的網絡訓練結果更好,收斂更快。但運行時間比後者略長。
訓練50次後:
(上面爲原四層神經網絡,下面爲RNN())
它倆都是相同的網絡結構,只是激活函數不同,可見運行結果是有很大差別的,通過i進一步測試表明,偏置b取得小一點比較好,在上面的測試中,當b<0.5時,會取得不錯的效果,alpha值適宜取0.1~10。
代碼如下:
(因爲文本在qq日誌中不容易顯示出python語法縮進的特點,於是改用圖片顯示)