CNN_2_AlexNet

AlexNet - 2012

2012
年的ImageNet LSVRC比賽上AlexNet 拿了冠軍,且準確率遠優於第二名。

Model Architecture





    一、AlexNet的特點
    1、使用Relu當激活/啟動(Activation Function)函數AlexNet前常用的激活函數是Sigmoid (0,1)tanh (-1,1)。但這兩個啟動函數在接近(0,1),(-1,1)時微分幾乎為0,會導致梯度下降很緩慢而使訓練卡住。


    相較於SigmoidtanhRelu的優點為收斂快速,其微分計算簡單在Back propagation時可省去複雜的運算。


    2Dropout AlexNet使用Dropout來降低Overfitting,在fc6fc7使用Dropout,參數為0.5,代表Neuron50%的機率不作用。

    3Data Augmentation,使用兩種方式:

    • ImageNet中圖片解析度不固定,作者在保持原比例下將短邊resize256,並取圖片正中部分的256* 256,再由此256* 256進行隨機裁切取224 * 224 ,總共會有32*32patch,加上水平翻轉將資料擴增32*32*2 =2048 patch
    • 图片像素值的PCA:參考https://zhuanlan.zhihu.com/p/77480151,引用其說明 一張圖片有3個通道,RGB3個通道間的3x3協方差矩陣,求出其特徵值λi和特徵向量Piλi再乘以一個服從高斯分佈N(0;0.1)的亂數αi的到λi * αii=1,2,3)。再利用下式,就可以求出RGB每個通道不隨圖片灰度值變化的重要特性object identity
                     [公式]
                 
                 每個通道加上上述相應的特性值。

          4Local Response Normalization,將a(i,x,y)i-n/2i+n/2個通道做正規化
                

                
                其中AlphaBetakn皆為Hyperparameters
                AlexNet值為 Alpha = 10^-4Beta = 0.57k = 2n = 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   
 -------------------------------------------------------------------------------------------------------------------------

    5Maxpooling LeNet採用的是平均池化,而AlexNet採用的是最大池化









留言

熱門文章