AlexNet:ILSVRC2012年冠军
改进
(1)成功使用ReLU作为CNN的激活函数,并验证其效果在较深的网络超过了Sigmoid,成功解决了Sigmoid在网络较深时的梯度弥散问题。虽然ReLU激活函数在很久之前就被提出了,但是直到AlexNet的出现才将其发扬光大。
(2)训练时使用Dropout随机忽略一部分神经元,以避免模型过拟合。Dropout虽有单独的论文论述,但是AlexNet将其实用化,通过实践证实了它的效果。在AlexNet中主要是最后几个全连接层使用了Dropout。
(3)在CNN中使用重叠的最大池化。此前CNN中普遍使用平均池化,AlexNet全部使用最大池化,避免平均池化的模糊化效果。并且AlexNet中提出让步长比池化核的尺寸小,这样池化层的输出之间会有重叠和覆盖,提升了特征的丰富性。
(4)提出了LRN层(Local Response Normalization局部响应归一化),对局部神经元的活动创建竞争机制,使得其中响应比较大的值变得相对更大,并抑制其他反馈较小的神经元,增强了模型的泛化能力。
(5)多GPU训练(两个GPU,每个GPU显存中存储一半的神经元参数)和数据增强(降低过拟合)
输入层:227*227*3===》C1(relu)、lrn1、pool1(最大池化)===》C2(relu)、lrn2、pool2(最大池化)===》C3(relu)===》C4(relu)===》C5(relu)===》F6、Dropou6===》F7、Dropout7===》F8(输出层)
TensorFlow实现
网络结构如下:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2018/7/23 9:53
# @Author : HJH
# @Site :
# @File : AlexNet.py
# @Software: PyCharm
impo