by 高煥堂
- [email protected]
- 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 ~
来源: http://www.bubuko.com/infodetail-3146507.html