CNN_2_AlexNet
AlexNet - 2012
2012年的ImageNet LSVRC比賽上AlexNet 拿了冠軍,且準確率遠優於第二名。
Model Architecture
- ImageNet中圖片解析度不固定,作者在保持原比例下將短邊resize到256,並取圖片正中部分的256* 256,再由此256* 256進行隨機裁切取224 * 224 ,總共會有32*32種patch,加上水平翻轉將資料擴增32*32*2 =2048 個patch。
一、AlexNet的特點
1、使用Relu當激活/啟動(Activation
Function)函數,在AlexNet前常用的激活函數是Sigmoid (0,1)、tanh (-1,1)。但這兩個啟動函數在接近(0,1),(-1,1)時微分幾乎為0,會導致梯度下降很緩慢而使訓練卡住。
相較於Sigmoid和tanh,Relu的優點為收斂快速,其微分計算簡單在Back propagation時可省去複雜的運算。
2、Dropout, AlexNet使用Dropout來降低Overfitting,在fc6與fc7使用Dropout,參數為0.5,代表Neuron有50%的機率不作用。
3、Data Augmentation,使用兩種方式:
- 图片像素值的PCA:參考https://zhuanlan.zhihu.com/p/77480151,引用其說明 ”一張圖片有3個通道,RGB。3個通道間的3x3協方差矩陣,求出其特徵值λi和特徵向量Pi,λi再乘以一個服從高斯分佈N(0;0.1)的亂數αi的到λi * αi(i=1,2,3)。再利用下式,就可以求出RGB每個通道不隨圖片灰度值變化的重要特性object identity。
每個通道加上上述相應的特性值。
4、Local Response
Normalization,將a(i,x,y)與i-n/2到i+n/2個通道做正規化
其中Alpha、Beta、k、n皆為Hyperparameters,
AlexNet值為 Alpha = 10^-4、Beta = 0.57、k = 2、n = 5
LRN Python implement
-------------------------------------------------------------------------------------------------------------------------
def LRN(a, alpia, beta, k, n):
import numpy as np
I = a.shape[0]
X = a.shape[1]
Y = a.shape[2]
b = np.zeros_like(a, dtype = float)
Temp = 0
for i in range(I):
min_i = int(max(0, i-2/n))
max_i = int(min(I, i+2/n+1))
for x in range(X):
for y in range(Y):
Temp = 0
for l in
range(min_i, max_i):
temp
= pow(a[l, x, y], 2)
Temp
+= temp
b[i,x,y] =
a[i,x,y] / pow (k + alpia * Temp, beta)
return b
-------------------------------------------------------------------------------------------------------------------------
5、Maxpooling, LeNet採用的是平均池化,而AlexNet採用的是最大池化。
留言
張貼留言