TensorFlow学习笔记之五(卷积神经网络)
文章目錄
- 1. 圖片識別問題簡介以及經典數據集
- 1.1 圖片識別問題簡介
- 1.2 經典數據集
- 1. 單通道圖片求卷積
- 1.1 基本的圖片求卷積
- 1.2 填充的圖片求卷積
- 1.3 TensorFlow計算卷積
- 2. 三通道圖片求卷積
- 3. 池化層
- 4. 小結
- 4.1 輸入圖片為正方形,卷積核為正方形,單卷積核,單通道
- 4.2 輸入圖片為正方形,卷積核為正方形,單卷積核,三通道
- 4.3 輸入圖片為正方形,卷積核為正方形,多卷積核,多通道
- 5.
1. 圖片識別問題簡介以及經典數據集
1.1 圖片識別問題簡介
視覺是人類認識世界非常重要的一種知覺。對于人來說,通過視覺來識別手寫體數字、識別圖片中的物體或者找出圖片中人臉的輪廓都是非常簡單的任務。但是這對于計算機來說不是一件簡單的事情。
圖片識別問題希望借助計算機中的程序來處理、分析和理解圖片中的內容,使得計算機可以從圖片中識別各種不同模式的目標和對象。比如前面的MNIST聯系就是通過計算機來識別圖片中的手寫體數字。
1.2 經典數據集
MNIST數據集:TensorFlow入門數據集
CIFAR :CIFAR數據集是一個影響力很大的圖像分類數據集。分為CIFAR-10和CIFAR-100兩個問題,它們都是圖像字典項目(Visual Dictionary)中800萬張圖片中的一個子集。CIFAR數據集中的圖片是32*32的彩色圖片。
ImageNet:
無論是MNIST還是CIFAR數據集,相比真實環境有兩個最大的問題:
為了更加貼近真實環境下的圖像識別問題,由斯坦福大學的李飛飛教授帶頭整理的ImageNet很大程度地解決了這兩個問題。
ImageNet是一個基于WordNet的大型圖像數據庫。
目標:抽取一個32323的圖片的特征,再將提取的特征喂入到全連接網絡。
- 卷積可以認為是一種有效提取圖像特征的方法。
- 一般會用一個正方形的卷積核,遍歷圖片上的每個像素點。圖片內的每個像素點,乘以卷積核上相對應的點的權重,求和,在加上偏置。
1. 單通道圖片求卷積
1.1 基本的圖片求卷積
現在對于一個551的圖片,用一個331的卷積核求卷積。
如圖所示,計算機會將一張551圖片轉換為一個55的矩陣,矩陣中的每個值代表其像素點的灰度。現在用一個33的矩陣對其求卷積。
每次求卷積的過程為拿著卷積核在原始圖片舉證上求卷積。如圖中所示,就是
1?(?1)+0?0+2?1+5?1+4?0+2?1+3?(?1)+4?0+5?1+1=11*(-1)+0*0+2*1+5*1+4*0+2*1+3*(-1)+4*0+5*1+1=1 1?(?1)+0?0+2?1+5?1+4?0+2?1+3?(?1)+4?0+5?1+1=1
其總體大概過程如圖
圖片來源于
可以看我們是拿卷積核在原始圖片上“滑動”求卷積。
在這里,影響輸出矩陣的規格的因素有,原始圖片大小,卷積核大小,滑動的步長。
一張圖片經過一次卷積操作輸出的邊長 = ( 輸入圖片的邊長 - 卷積核 + 1 ) /步長(向上取整)
比如上圖中,輸出邊長 = ( 5 - 3 +1 ) / 1 = 3
1.2 填充的圖片求卷積
有時候,需要在圖片的周圍進行填充(有全零填充和其他填充),如下圖所示:
那么輸出的邊長就等于 = 輸入長度 / 步長 = 5 / 1 = 5(向上取整)
在TensorFlow中,用參數padding = ‘SAME’(填充) 或者 padding = ‘VALID’(未填充) 表示
總的來說,卷積是講一個矩陣進行信息提取(特征抽取)的作用。參數為卷積核參數3 * 3 = 9個
1.3 TensorFlow計算卷積
tf.nn.conv2d(
輸入描述: 一次喂入圖片數, 圖片分辨率(兩位),通道數
輸出描述: 卷積核分辨率(兩位), 通道數,核的個數
核滑動步長,第一個和第四個固定為1。第二三個分別為行步長和列步長。
pading = ‘VALID’
)
2. 三通道圖片求卷積
在一般情況下,我們遇到的圖片都是彩色圖片。在計算機中,他們都是三通道圖片(三基色原理,RGB紅綠藍)。
所以我們的圖片矩陣變成了5 * 5 * 3。此時我們的卷積核變成了3 * 3 * 3 。
3. 池化層
池化的作用:
- 減少特征的數量
- 最大值池化可以提取圖片紋理,均值池化可保留背景特征
4. 小結
從計算的角度來看:卷積操作就是矩陣操作。
4.1 輸入圖片為正方形,卷積核為正方形,單卷積核,單通道
不填充
輸出的矩陣邊長=輸入邊長?卷積核邊長+1步長輸出的矩陣邊長 =\frac{輸入邊長 - 卷積核邊長 + 1}{步長} 輸出的矩陣邊長=步長輸入邊長?卷積核邊長+1?
填充
輸出的矩陣邊長=輸入邊長步長輸出的矩陣邊長 =\frac{輸入邊長 }{步長} 輸出的矩陣邊長=步長輸入邊長?
在這里有個疑惑,比如卷積核邊長為三,填充一層,也就是輸入邊長+2。輸出邊長滿足上述兩個公式。
假如卷積核邊長為5。那么是填充一層還是兩層?
4.2 輸入圖片為正方形,卷積核為正方形,單卷積核,三通道
邊長與單通道類似
輸出通道數可以為1,每個對應的通道數相乘后相加。
可以為3,每個對應的通道數相乘后,相互獨立。
也可以為9,輸入的每個通道數與卷積核的通道數相乘,再相加。
4.3 輸入圖片為正方形,卷積核為正方形,多卷積核,多通道
邊長與單通道類似
輸出通道數
= 卷積核個數,每個對應的通道數相乘后相加。
= 卷積核個數3, 每個對應的通道數相乘后,相互獨立。
= 卷積核個數9,輸入的每個通道數與卷積核的通道數相乘,再相加。
5.
總結
以上是生活随笔為你收集整理的TensorFlow学习笔记之五(卷积神经网络)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: git操作之版本控制
- 下一篇: 深度学习入门之PyTorch学习笔记:卷