深度學習學習心得 第五篇 === ![grade](https://img.shields.io/badge/Grade-新手-brightgreen) ![build](https://img.shields.io/badge/Build-keras-important) --- ## CNN 1. 我們希望每個NUERAL都可以成為最小單位的分類器 2. 使用DNN的時候,通常會需要太多的參數 3. 所以使用CNN來減少參數 :::info DNN:假設一張100x100的彩色照片 = 30000維 若每層nueral 有1000個,那參數就是30000x1000個 ::: ---- 基本想法 --- 1. 一張圖不是全部的地方都有特徵 2. 將一些不太重要的權重去掉來減少參數 3. 減少參數:用一些我們已經知道的規則 4. CNN模型結構比DNN結構還要簡單 --- 重點1.Nueral --- 1. 要找到輸入影像中的某些規則 往往不需要看整張影像 就可以找到規則(pattern) 2. Ex. Find 鳥嘴不需要看整張圖 3. 故得知每個nueral只要連接到部分網路 而非全部都要連接 ![](https://i.imgur.com/kSkmGY4.png) ---- 重點2.減少分類器 -- 1. 某些pattern在不同訓練資料中 處在不同位置,不需要訓練2個 重複性的detector 2. 一樣是舉鳥嘴的例子 ![](https://i.imgur.com/zM3I4iC.png) ---- 重點3.Subsampling --- 1. 子採樣可以有效降低參數數量 2. 子採樣的方式通常採用maxpooling 3. 當然不只maxpooling,還有其他的pooling ---- CNN進行流程與重點的關係 --- :::info CNN流程: input -> convolution -> maxpooling ->convolution -> maxpooling..... ->flatten-> fully-connected ->output ::: 1. convolution -> maxpooling流程可以循環多次 2. 重點1 & 重點2: convolution 3. 重點3: maxpooling --- Convolution(捲積) --- 1. 現在輸入影像6x6,捲基層有多組filter 2. 先將filter(大小3x3)放到左上角進行內積(值= 3) ![](https://i.imgur.com/e3WvNEN.png) 3. 接著根據stride決定往右挪動距離,再往下內積 ---- 捲積意義1 --- ![](https://i.imgur.com/uMkGoTW.png) 1. 內積結果將原本6x6 -> 4x4 的矩陣 2. Filter 1偵測到左上角與左下角的值最大 ->有filter1想找的pattern 3. 重點2:不同位置pattern可用同一filter找到 ---- 捲積意義2 --- ![](https://i.imgur.com/ET0HPMP.png) 1. 接著換filter2去跑,跑出來一樣也是4x4矩陣 2. 所有filter都跑完之後就得到 feature map 3. 固定filter大小的做法有一些隱憂: 鳥嘴大小差太多可能就沒辦法用同個filter找到 ---- 捲積意義3 --- 1. 彩色image=input,filter會變成立體的nxnx3 同一個filter會同時考慮3個不同顏色channel 2. Convolution可以視為DNN中的部分輸出值 3. 不是所有nueral都連接到3 =>減少參數 ![](https://i.imgur.com/mlEtzod.png) ---- 捲積意義4 --- ![](https://i.imgur.com/R6woLfz.png) 1. 不同的nueral ouput間會共用同一個weight 2. 每個input給不同output 的weight都是一樣的 3. 編號2給輸出3與輸出-1的weight都是一樣的 -> 減少更多參數 --- Maxpooling(最大池化) --- ![](https://i.imgur.com/cVukCLQ.png) 1. 根據filter算出的feature map 我們可以再將它縮小成n個一組 2. 這邊舉例用4個一組,然後4個裡面 選擇最大值代表(見下頁) ---- **最大值代表** ![](https://i.imgur.com/K019dFv.png) ---- 輸入大小變化 --- ![](https://i.imgur.com/c3KXuuS.png) 1. input:6x6 2. conv -> maxpooling 3. output:2x2 4. 參數真的有變少 :+1: ---- Flatten --- 1. feature map拉直 = DNN的input ![](https://i.imgur.com/SFxB5cb.png) :::warning 做CNN時要注意input不再是一般向量 而是高維的向量 ::: --- ## Next Lesson ... 1. CNN code review ###### tags: `Deep learning` `beginner` `python` `keras` `tutorial`
{"metaMigratedAt":"2023-06-15T05:46:28.127Z","metaMigratedFrom":"YAML","title":"深度學習學習心得-5","breaks":true,"disqus":"hackmd","contributors":"[{\"id\":\"6bb13895-9bc1-441a-8b8f-cc9578e3b5bc\",\"add\":5518,\"del\":3083}]"}
    386 views