网站建设简介淄博,河北建设厅网站,重庆市造价工程信息网官网,企业宣传方案模板一、背景
AlexNet是在2012年由Alex Krizhevsky等人提出的#xff0c;该网络在2012年的ImageNet大赛上夺得了冠军#xff0c;并且错误率比第二名高了很多。Alexnet共有8层结构#xff0c;前5层为卷积层#xff0c;后三层为全连接层。 论文地址#xff1a;ImageNet Classif… 一、背景
AlexNet是在2012年由Alex Krizhevsky等人提出的该网络在2012年的ImageNet大赛上夺得了冠军并且错误率比第二名高了很多。Alexnet共有8层结构前5层为卷积层后三层为全连接层。 论文地址ImageNet Classification with Deep Convolutional Neural Networks 二、创新点
1、使用大型深度卷积神经网络 作者使用了一个大型深度卷积神经网络在ImageNet数据集上取得了非常好的结果。说明大型网络对模型的效果影响比较大这也是为什么现在大家都在做大模型的原因。
2、ReLU激活函数 该论文推广了使用整流线型单元ReLC)激活函数这有助于训练更深的网络而不会出现梯度消失的问题。
3、局部响应一体化LRN)的使用
4、数据增强 为了减少过拟合作者采用数据增强的方法。通过对训练图像进行平移、翻转等操作来扩充训练集从而增强了训练样本的多样性。
5、Dropout技术 为了进一步减少过拟合作者采用了dropout技术。在训练过程中以一定概率将隐藏层神经元的输出置为零。 可以看出这篇文章发表在2012年已经是很久以前但是这篇文章用到的Relu函数Dropout技术到目前还是广泛使用的。
三、AlexNet使用PyTorch框架实现
from torch import nnclass AlexNet(nn.Module):def __init__(self,class_num):super(AlexNet,self).__init__()self.class_num class_num# input(N,3,224,224)self.net nn.Sequential(nn.Conv2d(in_channels3,out_channels96,kernel_size11,stride4,padding_modezeros),nn.ReLU(inplaceTrue),nn.LocalResponseNorm(size5,alpha1e-4,beta0.75,k2),nn.MaxPool2d(kernel_size3,stride2),nn.Conv2d(in_channels96,out_channels256,kernel_size5,stride1,padding_modezeros),nn.ReLU(inplaceTrue),nn.LocalResponseNorm(size5,alpha1e-4,beta0.75,k2),nn.MaxPool2d(kernel_size3,stride2),nn.Conv2d(in_channels256, out_channels384, kernel_size3, stride1, padding_modezeros),nn.ReLU(inplaceTrue),nn.Conv2d(in_channels384, out_channels384, kernel_size3, stride1, padding_modezeros),nn.ReLU(inplaceTrue),nn.Conv2d(in_channels384, out_channels384, kernel_size3, stride1, padding_modezeros),nn.ReLU(inplaceTrue),nn.MaxPool2d(kernel_size1,stride2))self.fully_connectednn.Sequential(nn.Linear(in_features256*6*6,out_features4096),nn.ReLU(),nn.Dropout(p0.5),nn.Linear(in_features4096,out_features4096),nn.ReLU(),nn.Dropout(p0.5),nn.Linear(in_features4096,out_featuresself.class_num))self.init_bias()def init_bias(self):for layer in self.net:if isinstance(layer,nn.Conv2d):nn.init.normal_(layer.weight,mean0,std0.01)nn.init.constant_(layer.bias,0)nn.init.constant_(self.net[4].bias,1)nn.init.constant_(self.net[10].bias,1)nn.init.constant_(self.net[12].bias,1)nn.init.constant_(self.fully_connected[0].bias,1)nn.init.constant_(self.fully_connected[3].bias,1)def forward(self,x):x self.net(x)x x.view(-1,256*6*6)x self.fully_connected(x)return x四、AlexNet使用keras框架实现
from keras.models import Sequential
from keras.layers import Conv2D, AveragePooling2D, Flatten, Dense,Activation,MaxPool2D, BatchNormalization, Dropout
from keras.regularizers import l2
# 实例化一个空的顺序模型
model Sequential(nameAlexnet)
# 1st layer (conv pool batchnorm)
model.add(Conv2D(filters 96, kernel_size (11,11), strides(4,4), paddingvalid, kernel_regularizerl2(0.0005),
input_shape (227,227,3)))
model.add(Activation(relu)) #---- activation function can be added on its own layer or within the Conv2D function
model.add(MaxPool2D(pool_size(3,3), strides (2,2), paddingvalid))
model.add(BatchNormalization())# 2nd layer (conv pool batchnorm)
model.add(Conv2D(filters256, kernel_size(5,5), strides(1,1), paddingsame, kernel_regularizerl2(0.0005)))
model.add(Activation(relu))
model.add(MaxPool2D(pool_size(3,3), strides(2,2), paddingvalid))
model.add(BatchNormalization())# layer 3 (conv batchnorm) --- note that the authors did not add a POOL layer here
model.add(Conv2D(filters384, kernel_size(3,3), strides(1,1), paddingsame, kernel_regularizerl2(0.0005)))
model.add(Activation(relu))
model.add(BatchNormalization())# layer 4 (conv batchnorm) --- similar to layer 3
model.add(Conv2D(filters384, kernel_size(3,3), strides(1,1), paddingsame, kernel_regularizerl2(0.0005)))
model.add(Activation(relu))
model.add(BatchNormalization())# layer 5 (conv batchnorm)
model.add(Conv2D(filters256, kernel_size(3,3), strides(1,1), paddingsame, kernel_regularizerl2(0.0005)))
model.add(Activation(relu))
model.add(BatchNormalization())
model.add(MaxPool2D(pool_size(3,3), strides(2,2), paddingvalid))# 平铺 CNN 输出为其提供完全连接的层
model.add(Flatten())# layer 6 (Dense layer dropout)
model.add(Dense(units 4096, activation relu))
model.add(Dropout(0.5))# layer 7 (Dense layers)
model.add(Dense(units 4096, activation relu))
model.add(Dropout(0.5))# layer 8 (softmax output layer)
model.add(Dense(units 1000, activation softmax))# 打印模型摘要
model.summary()