2012年AlexNet横空出世,赢得了ImageNet2012图像识别挑战赛。首次证明了学习到的特征可以超越手工设计的特征。
AlexNet模型使用了8层卷积神经网络,其中有5层卷积和2层全连接层以及1个全连接输出层。
网络结构与具体参数如下:
Block | 连接层 | Filter大小 | 步长stride | Filter个数 | 图像尺寸 | 计算方法 |
input | / | / | / | / | 227*227*3 | / |
1 | 卷积层 | 11*11 | 4 | 96 | 55*55*96 | (227-11)/4+1=55 |
池化层 | 3*3 | 2 | / | 27*27*96 | (55-3)/2+1=27 | |
2 | 卷积层 | 5*5 | 1 | 128*2 | (27-5+2*2)/1+1=27 | 27*27*128*2 |
池化层 | 3*3 | 2 | / | (27-3)/2+1=13 | 13*13*128*2 | |
3 | 卷积层 | 3*3 | 1 | 192*2 | (13-3+1*2)/1+1=13 | 13*13*192*2 |
4 | 卷积层 | 3*3 | 1 | 192*2 | (13-3+1*2)/1+1=13 | 13*13*192*2 |
5 | 卷积层 | 3*3 | 1 | 128*2 | (13-3+1*2)/1+1=13 | 13*13*128*2 |
池化层 | 3*3 | 2 | / | (13-3)/2+1=6 | 6*6*128*2 | |
6 | 全连接层 | 6*6 | / | 256 | 4096 | Relu、Dropout |
7 | 全连接层 | / | / | / | 4096 | / |
8 | 全连接层 | 1000 | SoftMax |
from keras.models import Sequential
from keras.layers import Dense, Flatten, Dropout
from keras.layers.convolutional import Conv2D, MaxPooling2D
from keras.utils.np_utils import to_categorical
import numpy as np
seed = 7
np.random.seed(seed)
# 创建模型序列
model = Sequential()
#第一层卷积网络,使用96个卷积核,大小为11x11步长为4, 要求输入的图片为227x227, 3个通道,不加边,激活函数使用relu
model.add(Conv2D(96, (11, 11), strides=(1, 1), input_shape=(28, 28, 1), padding='same', activation='relu',
kernel_initializer='uniform'))
# 池化层
model.add(MaxPooling2D(pool_size=(3, 3), strides=(2, 2)))
# 第二层加边使用256个5x5的卷积核,加边,激活函数为relu
model.add(Conv2D(256, (5, 5), strides=(1, 1), padding='same', activation='relu', kernel_initializer='uniform'))
#使用池化层,步长为2
model.add(MaxPooling2D(pool_size=(3, 3), strides=(2, 2)))
# 第三层卷积,大小为3x3的卷积核使用384个
model.add(Conv2D(384, (3, 3), strides=(1, 1), padding='same', activation='relu', kernel_initializer='uniform'))
# 第四层卷积,同第三层
model.add(Conv2D(384, (3, 3), strides=(1, 1), padding='same', activation='relu', kernel_initializer='uniform'))
# 第五层卷积使用的卷积核为256个,其他同上
model.add(Conv2D(256, (3, 3), strides=(1, 1), padding='same', activation='relu', kernel_initializer='uniform'))
model.add(MaxPooling2D(pool_size=(3, 3), strides=(2, 2)))
model.add(Flatten())
model.add(Dense(4096, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(4096, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(10, activation='softmax'))
model.compile(loss='categorical_crossentropy', optimizer='sgd', metrics=['accuracy'])
model.summary()
代码参考:初探Alexnet网络结构
其他经典网络结构:
卷积神经网络之 LeNet卷积神经网络之(稠密连接网络)DenseNet
卷积神经网络之(深度卷积神经网络)AlexNet
卷积神经网络之(使用重复元素的网络)VGG
卷积神经网络之残差网络ResNet详解