经典论文解读——AlexNet(附tensorflow2实现)

经典论文解读:AlexNet

AlexNet是ImageNet LSVRC-2012夺冠模型,可以说是深度卷积神经网络的开篇。
AlexNet出自:ImageNet Classification with Deep Convolutional Neural Networks

论文总结:
1、该论文提出了AlexNet模型,对计算机视觉产生了非常大的影响。
2、提出RELU非线性激活函数,在imageNet数据集上比tanh,sigmiod等激活函数收敛快
3、由于当时GPU算力不够,在两个GPU上进行训练。
4、提出了 Local Response Normalization(局部响应归一化),即经卷积层输出后,各像素点在同方向的前面n/2个通道(最小为第0个通道)和后n/2个通道进行归一化。公式如下:
在这里插入图片描述
5、重叠池化,即池化核步长小于池化核大小,能够抑制过拟合。
6、数据增强:图像平移和水平反转;利用PCA改变图片的RGB值。
7、dropout:训练时以0.5的概率随机丢弃神经元的输出。在测试时使用全部神经元,并将神经元的输出乘以0.5。
8、.训练细节:
batch size=128,momentum=0.9,L2:0.0005;
W:均值为0方差为0.01的高斯分布随机初始化,
b:第二、四、五卷积层和全连接层初始化为1,使RELU有一个正向的输入,其余全为0;
学习率:初始为0.01,在训练过程中手动调节,一般是当错误率不下降时,学习率缩小10倍。

AlexNet网络结构详解
经典论文解读——AlexNet(附tensorflow2实现)_第1张图片
图片输入:论文中这里感觉有点问题,网上查了下,输入应该为(227,227,3)
conv1:
96个(11,11,3)的卷积核,stride=4。输出(55,55,96)
LRN:输出尺寸不变。
maxpooling:(3,3),stride=2,输出(27,27,96)

conv2
256个(5,5,96)的卷积核,stride=1,pading=2,输出(27,27,256)
LRN:输出尺寸不变。
maxpooling:(3,3),stride=2,输出(13,13,256)

conv3
384个(3,3,256)的卷积核,stride=1,pading=1,输出(13,13,384)

conv4
192个(3,3,384)的卷积核,stride=1,pading=1,输出(13,13,192)

conv5
256个(3,3,192)的卷积核,stride=1,pading=2,输出(13,13,256)
LRN:输出尺寸不变。
maxpooling:(3,3),stride=2,输出(6,6,256)

fc1
输出4096
fc2
输出4096
fc3
经softmax函数输出1000

:除了最后一层,其余层全用的ReLu激活函数

tensorflow2实现

import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import layers
def alexNet_model():
    alexNet = keras.Sequential()
    #第一层
    alexNet.add(layers.Conv2D(filters=96,kernel_size=(11,11),strides=(4,4),
                              activation='relu',input_shape=(227,227,3),name='Conv1'))
    alexNet.add(layers.BatchNormalization(name='BN1'))
    alexNet.add(layers.MaxPool2D(pool_size=(3,3),strides=(2,2),name='Pool1'))
    
    #第二层
    alexNet.add(layers.Conv2D(filters=256,kernel_size=(5,5),strides=(1,1),padding='same',
                              activation='relu',name='Conv2'))
    alexNet.add(layers.BatchNormalization(name='BN2'))
    alexNet.add(layers.MaxPool2D(pool_size=(3,3),strides=(2,2),name='Pool2'))
    
    #第三层
    alexNet.add(layers.Conv2D(filters=384,kernel_size=(3,3),strides=(1,1),padding='same',
                              activation='relu',name='Conv3'))
    
    #第四层
    alexNet.add(layers.Conv2D(filters=192,kernel_size=(3,3),strides=(1,1),padding='same',
                              activation='relu',name='Conv4'))
    
    #第五层
    alexNet.add(layers.Conv2D(filters=256,kernel_size=(3,3),strides=(1,1),padding='same',
                              activation='relu',name='Conv5'))
    alexNet.add(layers.BatchNormalization(name='BN3'))
    alexNet.add(layers.MaxPool2D(pool_size=(3,3),strides=(2,2),name='Pool3'))
    
    #全连接层
    alexNet.add(layers.Flatten())
    alexNet.add(layers.Dense(4096,activation='relu',name='fc1'))
    alexNet.add(layers.Dense(4096,activation='relu',name='fc2'))
    alexNet.add(layers.Dense(1000,activation='softmax',name='output'))
    
    return alexNet

AlexNet = alexNet_model()
AlexNet.summary()

经典论文解读——AlexNet(附tensorflow2实现)_第2张图片

你可能感兴趣的:(经典论文)