TensorFlow (4-1) CNN Basics
1. Convolution:
Convolution 中譯為捲積,是兩個函數的一種數學運算。文言一點的定義是表徵函數 f 與經過翻轉和平移的 g 的乘積函數所圍成的曲邊梯形的面積。 白話一點就是 f 和 g 的乘積加總(加總是針對不連續函數的說法,若 f 和 g 是連續的就是積分)。
圖像的捲積運算:
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhQXYtHX6G_uGHzDv04W1BO09avMv6GGz9iwRIHNNfXLSV9Pu_NeCql2aMAG-gjV8Ei-tdrTdqjMNBjBUHIX4xPkKwxGCuE7XhgOYin3imqXN2vx5nHipmaBJp2fcUVro2z4NOzSYdIWz8/s400/2018-04-30+12-25-20+%25E7%259A%2584%25E8%259E%25A2%25E5%25B9%2595%25E6%2593%25B7%25E5%259C%2596.png)
上圖我們畫出 9 pixels 的 image f 用 9 pixels 的 g 捲積的過程。捲積的計算由左上到右下為 0*4 + 0*0 + 0*0 + 0*0 + 1*0 + 1*0 + 0*0 + 1*0 + 2*(-4) = -8,捲積完結果放在中心。
捲積的結果可以視為是 image f 對 mask g 的響應。
2. 對 RGB 的矩陣捲積:
影像可以想像成 H*W*D 的三維矩陣,對三維矩陣的捲積要用三個維度的 mask。透過這種機制我們可以攫取 RGB 顏色上的特徵。
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhA6qvqkwMPJuqnnuZMpAxN3JyvRIRoxq9RD44uTlwDyjdWB-0_7I4gRpybNELOy0n2OrQnOf4DXi4tYvujMVgHkdRZnAvX3KGPmaqHz-qAQyAox7uUKCN0Eslab6tt7VGtU48wN2QdwHQ/s640/2018-04-30+12-42-31+%25E7%259A%2584%25E8%259E%25A2%25E5%25B9%2595%25E6%2593%25B7%25E5%259C%2596.png)
假設我們想找的特徵 (g) 有 6 個,則我們捲積完的結果會是一個深度是 6 的 bulk。
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg-QDTieQxjIsiTVAlSt-Qe1NdHZjx7CcieS9f5kKVz4Dn3hf34SumbgfzBgzFWHPvtkE44wLebGVQ3bmJckcwdCr4qJMtQowC6HiNK5hGfjR__E0ByTLxFB36aFM1hiH9tRm_SmC-XSVk/s640/2018-04-30+12-48-18+%25E7%259A%2584%25E8%259E%25A2%25E5%25B9%2595%25E6%2593%25B7%25E5%259C%2596.png)
3. Pooling:
Pooling 的中文是池化,概念上是選擇捲積後的資訊的手段,透過池化也可以減少之後運算的負擔。常見的池化方式有平均池化和最大池化。
對 4 pixels 平均池化
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEioMvhkf_NFole_HeL3iuGYBuTUXrhXWFN1lL2wPbD3l9aEdrIUm1XZX1UQqFUeHsZk-iXF_1Ird8tCAYdMndzNg8VABYp68nWlxrAlzjy0tQf4Si70_V9T6juvPeeSuvBNVmLacRxALOk/s200/2018-04-30+14-22-09+%25E7%259A%2584%25E8%259E%25A2%25E5%25B9%2595%25E6%2593%25B7%25E5%259C%2596.png)
結果為 1.25。
對 4 pixels 最大池化
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEioMvhkf_NFole_HeL3iuGYBuTUXrhXWFN1lL2wPbD3l9aEdrIUm1XZX1UQqFUeHsZk-iXF_1Ird8tCAYdMndzNg8VABYp68nWlxrAlzjy0tQf4Si70_V9T6juvPeeSuvBNVmLacRxALOk/s200/2018-04-30+14-22-09+%25E7%259A%2584%25E8%259E%25A2%25E5%25B9%2595%25E6%2593%25B7%25E5%259C%2596.png)
結果為 3。
4. CNN 的流程:
CNN 全名為 Convolutional Neural Network,主要的流程如下,先有個概念即可:
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgvGPQMvU7dyrTE039UIIF8U0vYgv-7wmUzkHlJPwzsFFj11n_0VCCQKgoUi2KX7Q69i3M-0lTlcj-o4Xbr0D3TxlnB4WP9nxxwqPvViZIOGcq_Me_NT4QJvePEGcQkywbmN-RWUbAKXzs/s640/2018-04-30+12-59-41+%25E7%259A%2584%25E8%259E%25A2%25E5%25B9%2595%25E6%2593%25B7%25E5%259C%2596.png)
- 輸入圖片
- 捲積然後用 relu 輸出響應
- 池化 (選擇較重要的資訊)
- 重複 2 和 3
- 扁平化並連接神經元
- softmax 輸出機率
Reference
[1] Tom Hope, Yehezkel S. Resheff, and Itay Lieder, Learning TensorFlow A Guide to Building Deep Learning Systems , O'Reilly Media (2017)
[2] Nikhil Buduma, Fundamentals of Deep Learning Designing Next-Generation Machine Intelligence Algorithms, O'Reilly Media (2017)
[3] Aurélien Géron, Hands-On Machine Learning with Scikit-Learn and TensorFlow Concepts, Tools, and Techniques to Build Intelligent Systems , O'Reilly Media (2017)
留言
張貼留言