可視化輕鬆學習CNN卷積模型

by 高煥堂

misoo.tw@qq.com

2019_08_06

  在本文裡,與您分享我<Excel+CNN>可視化AI的學習之路。對於一些菁英高手而言,像Keras+TF可以把Py程式寫得很簡潔的。然而,愈是簡潔,對於入門學生或非資訊系學生而言,就只能像門外人一樣<看熱鬧>了。為了讓中學生、非訊息科系大學生們也能輕鬆看門道。例如,簡潔的十行Python代碼就可以建立一個典型的CNN模型:

#------ Python 代碼範例 ----------------------------------------

conv = Conv2D(2, (2, 2), padding='valid', activation='relu', input_shape=(5, 5, 1))

poo = MaxPooling2D(pool_size=(2, 2), strides=2, padding='valid')

d = Dense(2, activation='softmax', name="Dense")

#--------------------------------------------------

model = Sequential()

model.add(conv)

model.add(poo)

model.add(Flatten())

model.add(d)

#--------------------------------------------------

model.compile(loss=keras.losses.categorical_crossentropy,

          optimizer=keras.optimizers.SGD(lr=0.08),

          metrics=['accuracy'])

model.fit(dx, dt, 1, 100, 0, shuffle=False)

#---------------------------------------------------------------

  這個AI模型裡包含:一個卷積層 + 一個Pooling層 + 一個Flatten層 + 一個Dense層。我來用Excel的三個頁面,將上述十行程式碼,加以視覺化。

     這呈現出了卷積層,由兩個Y嬛去探索一隻玩具兔,得到卷積結果,呈現於下一頁:

   上圖左邊就是兩個Y嬛卷積的結果( feature )。這個動作通稱為特徵提取。接著,按下<Pooling>,就推進到Pooling層:

同時也繼續往下推進到Flatten層,進入第 3頁面:

  上圖的左邊就是Flatten層,中間和右邊就是Dense層(例如採Softmax激活函數)。整個Feed-Forward過程都呈現出來了。接下來,運用BP黃金×××式來解釋整個BP流程。繼續按下<第1&2公式>,就做兩件事:

1) 從Error計算出Delta(敏感度),這是第1公式的事情。

2) 從將本層的Delta(敏感度)像波浪的漣漪效應般,逆向推回前一層(這是第2公式的事情):

    此時,已經推回到Pooling層了。 按下<UpSample>,就將漣漪繼續反向推到前一層(卷積層): 

  上圖的右邊就是漣漪效應逆推回來的Delta,這都是第2公式的運算。接下來執行<第3公式>,計算各層權重的修正值(dw和db)。繼續按下<第3公式>:

 這圖裡呈現出來卷積層的權重。此外,在第3頁,還有Dense層的權重:

   最後,按下第1頁的<修正W和B>,就實際更新權重值:

  由於這BP黃金×××式是如此地神奇。如同牛頓力學的三個定律。其計算出來的結果與Keras+TF的結果是完全一樣的:

    上圖下方是Dense層的權重更新結果,是由十行Keras+TF代碼所執行出來的結果,但是其運算算的過程是隱藏的。上半部的Excel則把過程呈現出來。同樣地,在卷積層裡,也是同樣情形。由十行Keras+TF代碼所執行出來的結果:

   但是,其運算算的過程是隱藏的。上半部的Excel則把過程呈現出來。

以上是我<Excel+TF>第二本書的範例,与您搶鲜分享。也歡迎參考我的《不編程,而學AI:Excel+TensorFlow》一書:

~ End ~