初识神经网络:AlexNet

继LeNet之后,卷积网络沉寂了14年。直到2012年,AlexNet在ILSVRC2010一举夺魁,将图片分类的精度提高了10个百分点。
AlexNet是一个教科书式的网络,相比对LeNet来说,AlexNet大大增加了神经网络的宽度和深度,也得益于计算能力的提高,网络的可学参数达到了千万级别。


AlexNet

AlexNet的几个特别之处:

  • 更宽更深的网络
  • 卷积层激活函数采用relu,防止梯度消失,一定程度缓解过拟合问题
  • 池化层采用overlap pooling,strides小于pool_size。论文中说可缓解过拟合
  • 卷积层之后进行归一化
  • dropout,缓解过拟合

Dropout的使用方法是在训练过程中随机将一定比例的隐层节点置0,Dropout能够缓解过拟合的原因是每次训练都会采样出一个不同的网络架构,但是这些结构是共享权值的。这种技术减轻了节点之间的耦合性,因为一个节点不能依赖网络的其它节点。因此,节点能够学习到更健壮的特征,因为只有这样,节点才能适应每次采样得到的不同的网络结构。在测试时,我们是不对节点进行Drop的。

使用keras实现代码:

import keras
from keras.datasets import mnist
from keras.models import Sequential
from keras.layers import Conv2D, MaxPool2D, Flatten, Dense, Dropout
from keras.layers.normalization import BatchNormalization
from keras.optimizers import SGD
from keras.utils import plot_model, to_categorical

import matplotlib.pyplot as plt

model = Sequential()
# relu激活函数不会产生梯度消失现象,一定程度缓解过拟合问题
model.add(Conv2D(input_shape=(277, 277, 3), strides=4, filters=96, kernel_size=(11, 11), padding='valid', activation='relu')) 
model.add(BatchNormalization()) #归一化
#overlap pooling:步长小于pooling核。论文中说可以减轻过拟合
model.add(MaxPool2D(pool_size=(3, 3), strides=2))
model.add(Conv2D(filters=256, kernel_size=(5, 5), padding='same', activation='relu'))
model.add(BatchNormalization())
model.add(MaxPool2D(pool_size=(3, 3), strides=2))
model.add(Conv2D(filters=384, kernel_size=(3, 3), padding='same', activation='relu'))
model.add(BatchNormalization())
model.add(Conv2D(filters=384, kernel_size=(3, 3), padding='same', activation='relu'))
model.add(BatchNormalization())
model.add(Conv2D(filters=256, kernel_size=(3, 3), padding='same', activation='relu'))
model.add(BatchNormalization())
model.add(MaxPool2D(pool_size=(2, 2), strides=2))
model.add(Flatten())
model.add(Dense(4096, activation='tanh'))
model.add(Dropout(0.5))  # 缓解过拟合
model.add(Dense(4096, activation='tanh'))
model.add(Dropout(0.5))
model.add(Dense(10, activation='softmax'))
model.summary()

可视化

from keras.utils.vis_utils import plot_model
from IPython.display import Image

plot_model(model, to_file="AlexNet.png", show_shapes=True)

Image('AlexNet.png')
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容