把RNN封裝成一個函數

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語法縮進的特點,於是改用圖片顯示
圖片

圖片

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章