---
# System prepended metadata

title: 深度學習學習心得-5
tags: [beginner, tutorial, keras, Deep learning, python]

---

---
title: '深度學習學習心得-5'
disqus: hackmd
---

深度學習學習心得
第五篇
===
![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`

