tiny_cnn 程序總結1----tiny_cnn簡述

    tiny_cnn實現了LeNet的字符識別功能,實現的方式也是利用卷集神經網絡,整個網絡共有6層,依次爲convolution_layer<32,32,5,1,6>,average_pooling_layer<28,28,6,2>,

convolution_layer<14,14,5,6,16,connection_table>,average_pooling_layer<10,10,16,2>,convolution_layer<5,5,5,16,120>,fully_connected_layer<120,10>。

    首先,第一層:convolution_layer<32,32,5,1,6>是對輸入圖像進行卷積,卷積核的大小是5x5,對輸入圖像使用了6個不同的卷積和分別進行卷積,目的是提取輸入圖像的不同特徵,最後得出6個不同的輸出。

    第二層:average_pooling_layer<28,28,6,2>是對第一層的輸出進行下采樣,第一層的輸出是28x28的數據,這裏使用2x2的窗口對其進行求均值,然後下采樣,得出14x14的輸出。

    第三層:convolution_layer<14,14,5,6,16,connection_table>,是再次對第二層的輸出進行卷積,卷積核仍然採用的是5x5的窗口,這層的卷積是用一定規定的,這一層共有16個卷積核,每一個卷積核分別與多個輸入相連,所以這裏會有一個connection_table來標記每個卷積與對應的哪些輸入相連接,connection_table的數據如下:

   

#define O true
#define X false
    static const bool connection [] = {
        O, X, X, X, O, O, O, X, X, O, O, O, O, X, O, O,
        O, O, X, X, X, O, O, O, X, X, O, O, O, O, X, O,
        O, O, O, X, X, X, O, O, O, X, X, O, X, O, O, O,
        X, O, O, O, X, X, O, O, O, O, X, X, O, X, O, O,
        X, X, O, O, O, X, X, O, O, O, O, X, O, O, X, O,
        X, X, X, O, O, O, X, X, O, O, O, O, X, O, O, O
    };
#undef O
#undef X

    其中每一列代表每一個卷積核與6個不同的輸入的連接狀況,X表示不連接,O表示連接。

    第四層:average_pooling_layer<10,10,16,2>,這一層的輸入就是前一層的10x10的輸出,16表示輸入的個數,同樣下采樣窗口還是用2x2的窗口,採樣的輸出就是16個5x5的輸出。

    第五層:convolution_layer<5,5,5,16,120>,這裏的輸入就是16個5x5的數據,然後繼續利用窗口爲5x5的卷積覈對其進行卷積,這一層共有120個卷積核,而且每個卷積核都和16個輸入想連接,最終的輸出是120個1x1的輸出。

    第六層:fully_connected_layer<120,10>,這一層是一個普通的BP神經網絡,這層網絡中的每個神經元都和所有的120個輸入相連接,最後的輸出個數是10個,用來表示0到9的數字。

    網絡的整體架構到這裏就已經完成,下面要做的就是對網絡進行訓練,訓練主要就是怎麼求梯度,求出梯度之後利用什麼算法作optimization,這一部分留作以後總結。

發佈了61 篇原創文章 · 獲贊 59 · 訪問量 29萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章