# Machine Learning ###### tags: `賴` `CNN` `Maching Learning`  - Machine Learning 演算法(Algorithms) 不只有 **Neural Network**,還包括 **K-Means**、**Support Vector Machines(SVM)**、**Decision Tree**等等,基本上,都是希望透過資料**分類(Classification)或分群(Clustering) 的方式,轉換為規則或知識,一般進行的步驟如下: 1. **訓練**:首先將已知的歷史資料,依資料特徵(譬如性別、年齡),將樣本作分類(譬如男人、女人、小孩),這就是所謂的訓練(Training)。 2. **建立模型(Model)**:訓練之後,我們就會得到一個模型(簡略的講,就是公式),推算未知的資料是哪一類,例如性別是男,年齡大於18歲,模型就推斷他是男人;反之,年齡小於18歲,不論性別,模型就推斷他是小孩。 3. **評估(Evaluation)**:隨機抓一部分的已知資料,測試模型的準確率(或其他評估指標,如 precision and recall),確定模型是堪用的,這就是『驗證』(Validation),有了評估指標,我們就可以跟老闆或客戶,拍胸脯、打包票,不準就切腹自盡(千萬不要喔)。 4. **預測(Prediction)**:有了以上模型後,一個未知的人進來後,我們就可以依據性別及年齡推斷,他/她是男人、女人或小孩? 但是,注意! Machine Learning 不是以程式撰寫明確的規則(If ... Then ...Else),而是『以已知的資料推斷未知的資料』,只要,不斷餵資料,機器就慢慢的變聰明了。 ## 神經網路(Neural Network)  - 主要是模仿生物的神經系統,透過層層連接的『神經元』(Neuron),建立傳導的模型,以推論輸入(Input)到輸出(Output)的過程。 - Input Layer 就是接收信號的神經元,Hidden Layer 就是隱藏層,而 Output Layer 就是做出反應的輸出層。而各神經元傳導的力量大小,稱為權重(Weight, 以W表示),也就是模型要求解的參數。如果求算出來,我們就得到一道公式,只要輸入信號,經過層層傳導,就可以推斷出結果了。 -  - Hidden Layer及Output Layer上每一個節點(圓圈)的值等於上一層所有節點的加權總和 - 統計學的簡單迴歸(Regression),迴歸要計算權重值(W),我們可以用『最小平方法』(Least Square),最小化『預測值與實際值的差距之平均值』(如下圖右),或者使用『線性規劃』(Linear Programming) 最小化目標函數,也可以求得W。 |  |  | | -------- | -------- | | 簡單迴歸(Regression) | 預測值與實際值的差距之平均值| - https://ithelp.ithome.com.tw/articles/10191528 - 所以,一個模型的好壞取決於我們採用何種『損失函數』、『成效衡量指標』(Metrics)、Activation Function、優化器(optimizer)、隱藏層數(Layers或Dense)、kernel_initializer以及它們使用的參數 - - https://ithelp.ithome.com.tw/articles/10191725 ## CNN卷積神經網路 - 取周遭 N x N 格的點構成一個面(N 稱為 Kernel Size,N x N 的矩陣權重稱為『卷積核』),每一格給予不同的權重,計算加權總和,當作這一點的 output,再移動至下一點以相同方式處理,至圖像的最後一點為止 - [How do Convolutional Neural Networks work?](https://brohrer.mcknote.com/zh-Hant/how_machine_learning_works/how_convolutional_neural_networks_work.html) ## CNN運算流程 - https://chih-sheng-huang821.medium.com/%E5%8D%B7%E7%A9%8D%E7%A5%9E%E7%B6%93%E7%B6%B2%E8%B7%AF-convolutional-neural-network-cnn-cnn%E9%81%8B%E7%AE%97%E6%B5%81%E7%A8%8B-ecaec240a631 ### 卷積 - 提取圖片中的特徵(feature) -  - 先透過濾鏡(filter)來提取圖片特徵(feature),轉換影像,例如取影像中的邊緣、銳利化、模糊化等等,透過不同的 filter 來盡可能取得影像特徵,然後再將這些特徵作為後面 Neuron 的輸入 - 一般在影像上,捲積運算後會再加上激活函數(activation function),進行非線性轉換,之後得到的圖片會稱為特徵圖(feature map)。 Feature map{i} = original Data * Kernel Map{i} (*為卷積運算) #### [激勵函數 activation function](https://cvfiasd.pixnet.net/blog/post/275774124-%E6%B7%B1%E5%BA%A6%E5%AD%B8%E7%BF%92%E6%BF%80%E5%8B%B5%E5%87%BD%E6%95%B8%E4%BB%8B%E7%B4%B9) - 利用非線性方程式,解決非線性問題。 - 若不使用激勵函數,類神經網路即是以線性的方式組合運算,因為隱藏層以及輸出層皆是將上層之結果輸入,並以線性組合計算,作為這一層的輸出,使得輸出與輸入只存在著線性關係 - 現實中,所有問題皆屬於非線性問題,因此,若無使用非線性之激勵函數,則類神經網路訓練出之模型便失去意義。 - 分類 - softmax:值介於 [0,1] 之間,且機率總和等於 1,適合多分類使用。  - sigmoid:值介於 [0,1] 之間,且分布兩極化,大部分不是 0,就是 1,適合二分法。   - Relu (Rectified Linear Units):忽略負值,介於 [0,∞] 之間。 - 使用Relu函數去掉負值,更能淬煉出物體的形狀  - tanh:與sigmoid類似,但值介於[-1,1]之間,即傳導有負值。   ##### [卷積降維&升維](https://chih-sheng-huang821.medium.com/%E5%8D%B7%E7%A9%8D%E7%A5%9E%E7%B6%93%E7%B6%B2%E8%B7%AF-convolutional-neural-network-cnn-1-1%E5%8D%B7%E7%A9%8D%E8%A8%88%E7%AE%97%E5%9C%A8%E5%81%9A%E4%BB%80%E9%BA%BC-7d7ebfe34b8) ### 池化 - 將圖片資料量減少並保留重要資訊的方法,把原本的資料做一個最大化或是平均化的降維計算。 -  - 如下圖,原本8x8的圖片因為我取2x2的池化,所以會變成4x4。 -  - 會根據feature map的結果去做pooling,然後得到的就是降維的特徵圖。此例為4x4的Pooling。 ### Flatten - 做完卷積運算和池化法後得到的特徵圖還是一個2-D的圖片,到全連接層前要先轉成1-D的陣列。(如果做完卷積或是池化後結構是1x1的feature map,此步驟可以省略) -  ### 全連接層部份 - 等於一般神經網路 - Input node: Flatten後的結果,此例為18個nodes。 - Hidden layer: 1層 5個nodes - Output node: 2個輸出結果。 ### Parameter   62是因為padding=valid(不補0)所以扣2,原本64 62->31因為pool_size=2*2 31->29因為padding=valid(不補0)所以扣2,原本64 29->14因為pool_size=2*2且padding=valid(不補0)所以會有一個消失29/2=14 14*14*32=6272 # Conference 1. https://chih-sheng-huang821.medium.com/%E5%8D%B7%E7%A9%8D%E7%A5%9E%E7%B6%93%E7%B6%B2%E8%B7%AF-convolutional-neural-network-cnn-cnn%E9%81%8B%E7%AE%97%E6%B5%81%E7%A8%8B-ecaec240a631 2. https://www.pyimagesearch.com/2018/12/31/keras-conv2d-and-convolutional-layers/ 3. https://ithelp.ithome.com.tw/articles/10191924 4. https://cs231n.github.io/convolutional-networks/ 5. https://chih-sheng-huang821.medium.com/%E5%8D%B7%E7%A9%8D%E7%A5%9E%E7%B6%93%E7%B6%B2%E8%B7%AF-convolutional-neural-network-cnn-%E5%8D%B7%E7%A9%8D%E8%A8%88%E7%AE%97%E4%B8%AD%E7%9A%84%E6%AD%A5%E4%BC%90-stride-%E5%92%8C%E5%A1%AB%E5%85%85-padding-94449e638e82 6. https://keras.io/api/optimizers/ 7. https://www.tensorflow.org/api_docs/python/tf/keras/optimizers 8. https://mropengate.blogspot.com/2017/02/deep-learning-role-of-activation.html 9. https://chih-sheng-huang821.medium.com/%E6%A9%9F%E5%99%A8%E5%AD%B8%E7%BF%92-%E7%A5%9E%E7%B6%93%E7%B6%B2%E8%B7%AF-%E5%A4%9A%E5%B1%A4%E6%84%9F%E7%9F%A5%E6%A9%9F-multilayer-perceptron-mlp-%E5%90%AB%E8%A9%B3%E7%B4%B0%E6%8E%A8%E5%B0%8E-ee4f3d5d1b41 10. https://hackmd.io/@allen108108/rkn-oVGA4 11. https://chtseng.wordpress.com/2017/09/23/%E5%AD%B8%E7%BF%92%E4%BD%BF%E7%94%A8keras%E5%BB%BA%E7%AB%8B%E5%8D%B7%E7%A9%8D%E7%A5%9E%E7%B6%93%E7%B6%B2%E8%B7%AF/ 12. https://stackoverflow.com/questions/44608552/keras-cnn-model-parameters-calculation 13.
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up