Open Pin-Jiun opened 1 year ago
Image Classification
首先先把所有的圖形RESIZE成相同的SIZE 一張彩色圖片可以理解成一個3維的Tensor
如何挑選input? 最直覺的方式是把這個三維Tensor拉直
全部放進去, 雖然增加模型的彈性, 但也容易造成overfitting且耗費時間training 根據影像的特性以及研究, 我們事實上不需要使用fully connected
Neural可以把它視為每個pattern的辨別, 看到至些pattern決定是否是鳥 上述的方法和人非常地像, 我們只抓取重要的特徵去判斷此圖片是屬於是什麼 要看這些pattern 不需要把整張圖片當成輸入
假設這個Neural只關心Receptive field 內的範圍, 將此範圍拿出來後拉直 將這27個input乘上weight後+上bias得到第一層的output
每個Neural會有自己定義的Receptive field
每個Neural
通常的Receptive field 設定
會使用全通道(RGB)
使用正方形定義Receptive field, 這個正方形的大小稱為Kernel size 這個Kernel size通常不會設太大, 通常大概使用3x3 Q.但是有些pattern不會只有3x3的大小啊?
一個Receptive field會有很多的Neural去守備它(64, 128..)
Stride表示Kernel size的移動範圍, 通常設定1或2 這樣可以使Receptive field有重疊避免沒抓取到
如果超過影像範圍會使用padding進行補值
但如果每個Receptive field都有一個Neural去守備這樣就會變成fully connected 所以可以使用parameter sharing
parameter sharing
兩個Neural有可能擁有共同的weight(和bias)
雖然參數相同, 但是因為輸入不同, 兩個輸出會不一樣 所以如果輸入一樣輸出就有可能一樣->Two neurons with the same receptive field would not share parameters.
常見的共享方式
每個 receptive field都有64個Neural去守備 每個 receptive field對於每個Neural有相同的參數
每個Neural共用的一組參數稱之為Filter
上述兩者關乘後的簡化整理
Convolutional Layer = 有使用Receptive Field和Parameter Sharing的層 有使用多層Convolutional Layer的Model架構稱之為 CNN
CNN雖然Model bias較大, 但是較不會有overfitting的問題 CNN經過研究, 對影像是一個很好的處理方式(如果影像之外要小心使用)
所以有了Pooling的方法 例如Max Pooling 就是在自己設定的範圍內選取最大的值
所以通常來說會convolution會接上Pooling
但是Pooling對於細部的pixel還是有影響 所以對於精細的圖片而言還是會把它拿掉, 例如alpha go
除了圍棋, 對於CNN還有許多的應用
卷積神經網路 Convolutional Neural Networks, CNN
Image Classification
首先先把所有的圖形RESIZE成相同的SIZE 一張彩色圖片可以理解成一個3維的Tensor
如何挑選input? 最直覺的方式是把這個三維Tensor拉直
全部放進去, 雖然增加模型的彈性, 但也容易造成overfitting且耗費時間training 根據影像的特性以及研究, 我們事實上不需要使用fully connected
影像的特性以及研究減少模型的彈性
觀察一 不需要把整張圖片當成輸入
Neural可以把它視為每個pattern的辨別, 看到至些pattern決定是否是鳥 上述的方法和人非常地像, 我們只抓取重要的特徵去判斷此圖片是屬於是什麼 要看這些pattern 不需要把整張圖片當成輸入
Receptive field
假設這個Neural只關心Receptive field 內的範圍, 將此範圍拿出來後拉直 將這27個input乘上weight後+上bias得到第一層的output
每個Neural會有自己定義的Receptive field
通常的Receptive field 設定![image](https://user-images.githubusercontent.com/34474924/236610277-6e56f0c3-74c6-42fe-b291-7ed53a717c17.png)
會使用全通道(RGB)
使用正方形定義Receptive field, 這個正方形的大小稱為Kernel size 這個Kernel size通常不會設太大, 通常大概使用3x3 Q.但是有些pattern不會只有3x3的大小啊?
一個Receptive field會有很多的Neural去守備它(64, 128..)
Stride表示Kernel size的移動範圍, 通常設定1或2 這樣可以使Receptive field有重疊避免沒抓取到
如果超過影像範圍會使用padding進行補值
觀察二 相同的pattern可能出現在圖像的不同區域
但如果每個Receptive field都有一個Neural去守備這樣就會變成fully connected 所以可以使用
parameter sharing
兩個Neural有可能擁有共同的weight(和bias)
雖然參數相同, 但是因為輸入不同, 兩個輸出會不一樣 所以如果輸入一樣輸出就有可能一樣->Two neurons with the same receptive field would not share parameters.
常見的共享方式
每個 receptive field都有64個Neural去守備 每個 receptive field對於每個Neural有相同的參數
每個Neural共用的一組參數稱之為Filter
上述兩者關乘後的簡化整理![image](https://user-images.githubusercontent.com/34474924/236611272-286e1615-22f9-48be-9548-397011ca0b2e.png)
Convolutional Layer = 有使用Receptive Field和Parameter Sharing的層 有使用多層Convolutional Layer的Model架構稱之為 CNN
CNN雖然Model bias較大, 但是較不會有overfitting的問題 CNN經過研究, 對影像是一個很好的處理方式(如果影像之外要小心使用)