卷积神经网络之(深度卷积神经网络)AlexNet
卷积神经网络之AlexNet
2012年AlexNet横空出世,赢得了ImageNet2012图像识别挑战赛。首次证明了学习到的特征可以超越手工设计的特征。
AlexNet模型
AlexNet模型使用了8层卷积神经网络,其中有5层卷积和2层全连接层以及1个全连接输出层。
网络结构与具体参数如下:
Block | 连接层 | Filter大小 | 步长stride | Filter个数 | 图像尺寸 | 计算方法 |
input | / | / | / | / | 2272273 | / |
1 | 卷积层 | 1111 | 4 | 96 | 555596 | (227-11)/4+1=55 |
池化层 | 33 | 2 | / | 272796 | (55-3)/2+1=27 | |
2 | 卷积层 | 55 | 1 | 1282 | (27-5+22)/1+1=27 | 27271282 |
池化层 | 33 | 2 | / | (27-3)/2+1=13 | 13131282 | |
3 | 卷积层 | 33 | 1 | 1922 | (13-3+12)/1+1=13 | 13131922 |
4 | 卷积层 | 33 | 1 | 1922 | (13-3+12)/1+1=13 | 13131922 |
5 | 卷积层 | 33 | 1 | 1282 | (13-3+12)/1+1=13 | 13131282 |
池化层 | 33 | 2 | / | (13-3)/2+1=6 | 661282 | |
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结构类似,但是使用了更多的卷积层和更大的参数空间拟合大规模数据集。
- 网络的深度很重要
代码参考:初探Alexnet网络结构
其他经典网络结构:
卷积神经网络之 LeNet卷积神经网络之(稠密连接网络)DenseNet
卷积神经网络之(深度卷积神经网络)AlexNet
卷积神经网络之(使用重复元素的网络)VGG
卷积神经网络之残差网络ResNet详解
还没有评论,来说两句吧...