卷积神经网络学习——AlexNet网络(tensorflow2.0)

卷积神经网络学习——AlexNet网络(tensorflow2.0)

目录

卷积神经网络学习——AlexNet网络(tensorflow2.0)

1、介绍

2、采用Relu作为激活函数

3、使用Dropout防止过拟合

4、使用数据增强技术

5、层叠池化

6、局部相应归一化

7、模型搭建


1、介绍

AlexNet是2012年ImageNet竞赛冠军获得者Hinton和他的学生Alex Krizhevsky设计的。也是在那年之后,更多的更深的神经网络被提出,比如优秀的vgg,GoogLeNet。 这对于传统的机器学习分类算法而言,已经相当的出色。

AlexNet中包含了几个比较新的技术点,也首次在CNN中成功应用了ReLU、Dropout和LRN等Trick。同时AlexNet也使用了GPU进行运算加速。AlexNet将LeNet的思想发扬光大,把CNN的基本原理应用到了很深很宽的网络中。

 

2、采用Relu作为激活函数

成功使用ReLU作为CNN的激活函数,并验证其效果在较深的网络超过了Sigmoid,成功解决了Sigmoid在网络较深时的梯度弥散问题。虽然ReLU激活函数在很久之前就被提出了,但是直到AlexNet的出现才将其发扬光大。

3、使用Dropout防止过拟合

训练时使用Dropout随机忽略一部分神经元,以避免模型过拟合。Dropout虽有单独的论文论述,但是AlexNet将其实用化,通过实践证实了它的效果。在AlexNet中主要是最后几个全连接层使用了Dropout。

Dropout是指在深度学习网络的训练过程中,对于神经网络单元,按照一定的概率将其暂时从网络中丢弃。注意是暂时,对于随机梯度下降来说,由于是随机丢弃,故而每一个mini-batch都在训练不同的网络。
Dropout说的简单一点就是:我们在前向传播的时候,让某个神经元的激活值以一定的概率停止工作,这样可以使模型泛化性更强,因为它不会太依赖某些局部的特征,如图1所示。

4、使用数据增强技术

数据增强,随机地从256*256的原始图像中截取224*224大小的区域(以及水平翻转和色度调整的镜像),相当于增加2048倍的数据量。如果没有数据增强,仅靠原始的数据量,参数众多的CNN会陷入过拟合中,使用了数据增强后可以大大减轻过拟合,提升泛化能力。进行预测时,则是取图片的四个角加中间共5个位置,并进行左右翻转,一共获得10张图片,对他们进行预测并对10次结果求均值。同时,AlexNet论文中提到了会对图像的RGB数据进行PCA处理,并对主成分做一个标准差为0.1的高斯扰动,增加一些噪声,这个Trick可以让错误率再下降1%。

5、层叠池化

在CNN中使用重叠的最大池化。此前CNN中普遍使用平均池化,AlexNet全部使用最大池化,避免平均池化的模糊化效果。并且AlexNet中提出让步长比池化核的尺寸小,这样池化层的输出之间会有重叠和覆盖,提升了特征的丰富性。

池化(Pooling)也成下采样或欠采样,是特征降维的一种方法,压缩数据和参数的数量,减小过拟合,同时提高模型的容错性。
下图中分别为最大池化(Max Pooling)和平均池化(Average Pooling)的直观表示。

6、局部相应归一化

提出了LRN层,对局部神经元的活动创建竞争机制,使得其中响应比较大的值变得相对更大,并抑制其他反馈较小的神经元,增强了模型的泛化能力。

7、模型搭建

导入库和模型搭建

import tensorflow as tf
from tensorflow import keras
class c2(tf.keras.layers.Layer):
    def __init__(self):
        super().__init__()
        
    def build(self,input_shape):
        self.w=tf.random.normal([5,5,input_shape[-1],256])
        
    def call(self,inputs):
        return tf.nn.conv2d(inputs,
                            filters=self.w,
                            strides=1,
                            padding=[[0, 0],[3, 3],
                                    [3, 3],[0, 0]])
x=tf.random.normal([1,277,277,3])
alexnet=keras.Sequential([
    keras.layers.Conv2D(96,11,5),
    keras.layers.ReLU(),
    keras.layers.MaxPooling2D((3,3),2),
    keras.layers.BatchNormalization(),
    
    c2(),
    keras.layers.ReLU(),
    keras.layers.MaxPooling2D((3,3),2),
    keras.layers.BatchNormalization(),
    
    keras.layers.Conv2D(384,3,1,padding='same'),
    keras.layers.ReLU(),
    
    keras.layers.Conv2D(384,3,1,padding='same'),
    keras.layers.ReLU(),
    
    keras.layers.Conv2D(256,3,1,padding='same'),
    keras.layers.ReLU(),
    keras.layers.MaxPooling2D((3,3),2),
    
    keras.layers.Flatten(),
    keras.layers.Dense(4096),
    keras.layers.ReLU(),
    keras.layers.Dropout(0.25),
    
    keras.layers.Dense(4096),
    keras.layers.ReLU(),
    keras.layers.Dropout(0.25),
    
    keras.layers.Dense(1000),
    keras.layers.Softmax(),
])
alexnet.build(input_shape=[None,277,277,3])
alexnet.summary()
Model: "sequential_68"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
conv2d_95 (Conv2D)           multiple                  34944     
_________________________________________________________________
re_lu_169 (ReLU)             multiple                  0         
_________________________________________________________________
max_pooling2d_148 (MaxPoolin multiple                  0         
_________________________________________________________________
batch_normalization_139 (Bat multiple                  384       
_________________________________________________________________
c2_66 (c2)                   multiple                  0         
_________________________________________________________________
re_lu_170 (ReLU)             multiple                  0         
_________________________________________________________________
max_pooling2d_149 (MaxPoolin multiple                  0         
_________________________________________________________________
batch_normalization_140 (Bat multiple                  1024      
_________________________________________________________________
conv2d_96 (Conv2D)           multiple                  885120    
_________________________________________________________________
re_lu_171 (ReLU)             multiple                  0         
_________________________________________________________________
conv2d_97 (Conv2D)           multiple                  1327488   
_________________________________________________________________
re_lu_172 (ReLU)             multiple                  0         
_________________________________________________________________
conv2d_98 (Conv2D)           multiple                  884992    
_________________________________________________________________
re_lu_173 (ReLU)             multiple                  0         
_________________________________________________________________
max_pooling2d_150 (MaxPoolin multiple                  0         
_________________________________________________________________
flatten_4 (Flatten)          multiple                  0         
_________________________________________________________________
dense_12 (Dense)             multiple                  37752832  
_________________________________________________________________
re_lu_174 (ReLU)             multiple                  0         
_________________________________________________________________
dropout_8 (Dropout)          multiple                  0         
_________________________________________________________________
dense_13 (Dense)             multiple                  16781312  
_________________________________________________________________
re_lu_175 (ReLU)             multiple                  0         
_________________________________________________________________
dropout_9 (Dropout)          multiple                  0         
_________________________________________________________________
dense_14 (Dense)             multiple                  4097000   
_________________________________________________________________
softmax_4 (Softmax)          multiple                  0         
=================================================================
Total params: 61,765,096
Trainable params: 61,764,392
Non-trainable params: 704
_________________________________________________________________
#模型编译
alexnet.compile(loss="sparse_categorical_crossentropy",
              optimizer="sgd",
              metrics = ["accuracy"])

 

  • 1
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

岁月蹉跎的一杯酒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值