一些著名的CNN网络结构总览
![](https://i-blog.csdnimg.cn/blog_migrate/2fabef8e260f543c6a2d89988b584970.png)
ILSVRC历年的Top-5错误率
![](https://i-blog.csdnimg.cn/blog_migrate/f4e724458400f08121ec2cdba4396715.png)
LeNet 1989
![](https://i-blog.csdnimg.cn/blog_migrate/ee0086a175a2c13df13b73461692f990.png)
LeNet是CNN的开山之作,意义:定义了CNN的基本组件,是CNN的鼻祖。
LeNet是卷积神经网络的祖师爷LeCun在1998年提出,用于解决手写数字识别的视觉任务。自那时起,CNN的最基本的架构就定下来了:卷积层、池化层、全连接层。如今各大深度学习框架中所使用的LeNet都是简化改进过的LeNet-5(-5表示具有5个层),和原始的LeNet有些许不同,比如把激活函数改为了现在很常用的ReLu。
LeNet-5跟现有的conv->pool->ReLU的套路不同,它使用的方式是conv1->pool->conv2->pool2再接全连接层,但是不变的是,卷积层后紧接池化层的模式依旧不变。
![](https://i-blog.csdnimg.cn/blog_migrate/7ef859fbf01b54fe74062ca7ffb0f61d.png)
LeNet - Keras版本
def LeNet():
model = Sequential()
model.add(Conv2D(32,(5,5),strides=(1,1),input_shape=(28,28,1),padding='valid',activation='relu',kernel_initializer='uniform'))
model.add(MaxPooling2D(pool_size=(2,2)))
model.add(Conv2D(64,(5,5),strides=(1,1),padding='valid',activation='relu',kernel_initializer='uniform'))
model.add(MaxPooling2D(pool_size=(2,2)))
model.add(Flatten())
model.add(Dense(100,activation='relu'))
model.add(Dense(10,activation='softmax'))
return model
AlexNet 2012
NIPS2012 《ImageNet Classification with Deep Convolutional Neural Networks》
PaperLink
![](https://i-blog.csdnimg.cn/blog_migrate/f71eb27fb1c9aecaa7fa0a7b61c2a920.png)
AlexNet是2012年的ImageNet竞赛冠军
主要特点:更深的网络、数据增广、ReLU、dropout、LRN
详见另一篇:https://blog.csdn.net/weixin_43318626/article/details/88895352
基本参数:
输入:224×224大小的图片,3通道
第一层卷积:11×11大小的卷积核96个,每个GPU上48个。
第一层max-pooling:2×2的核。
第二层卷积:5×5卷积核256个,每个GPU上128个。
第二层max-pooling:2×2的核。
第三层卷积:与上一层是全连接,3*3的卷积核384个。分到两个GPU上个192个。
第四层卷积:3×3的卷积核384个,两个GPU各192个。该层与上一层连接没有经过pooling层。
第五层卷积:3×3的卷积核256个,两个GPU上个128个。
第五层max-pooling:2×2的核。
第一层全连接:4096维,将第五层max-pooling的输出连接成为一个一维向量,作为该层的输入。
第二层全连接:4096维
Softmax层:输出为1000,输出的每一维都是图片属于该类别的概率。
AlexNet - Keras版本
def AlexNet():
model = Sequential()
model.add(Conv2D(96,(11,11),strides=(4,4),input_shape=(227,227,3),padding='valid',activation='relu',kernel_initializer='uniform'))
model.add(MaxPooling2D(pool_size=(3,3),strides=(2,2)))
model.add(Conv2D(256,(5,5),strides=(1,1),padding='same',activation='relu',kernel_initializer='uniform'))
model.add(MaxPooling2D(pool_size=(3,3),strides=(2,2)))
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'))
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(1000,activation='softmax'))
return model
ZF-Net
![](https://i-blog.csdnimg.cn/blog_migrate/f747c348d027a85114b6614c7dbf098a.png)
ZFNet是2013ImageNet分类任务的冠军。
在结构上:ZF-Net只是将AlexNet第一层卷积核由11变成7,步长由4变为2,第3,4,5卷积层转变为384,384,256。
主要特点:对AlexNet进行了反卷积、特征可视化、移除某些网络层测试、遮蔽图像部分区域测试哪里是关键部位等骚操作,说是为了“理解卷积神经网络”。
ZFNet - Keras版本
def ZF_Net():
model = Sequential()
model.add(Conv2D(96,(7,7),strides=(2,