这次实验的主角并不是猫狗大战,而是AlexNet网络,只不过数据集为猫狗大战数据集。本次实验利用自己搭建的AlexNet网络实现猫狗大战,测试一下AlexNet网络的性能。

AlexNet网络作为LeNet网络之后得到的网络模型,在很多地方都有了重大的创新,而这些创新就目前来看仍有重大的意义。

1.创新点

1.ReLU非线性函数(ReLU Nonlinearity)
在AlexNet网络之前的网络模型中,大多采用sigmoid或者tanh作为激活函数,但是Alex(AlexNet网络的发明者)发现在训练时间的梯度衰减方面,这些非线性饱和函数非线性非饱和函数慢很多。在AlexNet中用的非线性非饱和函数:ReLU。实验表明,ReLU比tanh快6倍。
2.利用GPU进行运算
实现高效的GPU卷积运算结构,也使得此后GPU成为深度学习的主要工具。
3.LRN(局部响应归一化)
增加LRN的想法是之前的网络模型中不曾有的,虽然它的作用在后面的网络中没有体现出来,不过也是一次重要的创新。公式如下:

4.Overlapping Pooling
使用重叠的最大池化,以前在卷积神经网络中大部分都采用平均池化,在AlexNet中都是使用最大池化,最大池化可以避免平均池化的模糊化效果。重叠的最大池化是指卷积核的尺寸要大于步长,这样池化层的输出之间会有重叠和覆盖,提升特征的丰富性。在AlexNet中使用的卷积核大小为3×3,横向和纵向的步长都为2。
5.Data Augmentation(数据扩充)
也就是数据增强,使用Random Cropflip从而上千倍的扩充训练样本的数量,也使得随机裁剪成为通用方法。
6.DropOut
简而言之,这种方法是用来减少过拟合的风险,经过若干次实验发现,创新点5(Data Augmentation)也可以做到防止过拟合。Dropout的原理是通过训练时随机使得一部分结点失效,不贡献连接权重而减少过拟合风险。同时强迫这些神经元去学习互补的一些特征。

2.网络结构

AlexNet网络结构以及各层训练参数的计算如下图所示:

3.AlexNet网络搭建

与原始的AlexNet网络不同的是去除了两层Dropout层,最终的输出参数设置为了分类的类别数2,并且利用BN(BatchNormalization)代替了LRN(并没有太大的作用)。

def AlexNet(nb_classes, input_shape):input_tensor = Input(shape=input_shape)# 1st blockx = Conv2D(96, (11, 11), activation='relu', strides=4, name='block1_conv1')(input_tensor)x = BatchNormalization()(x)x = MaxPooling2D((3, 3), strides=2, name='block1_pool')(x)# 2nd blockx = Conv2D(256, (5, 5), activation='relu', padding='same', name='block2_conv1')(x)x = BatchNormalization()(x)x = MaxPooling2D((3, 3), strides=2, name='block2_pool')(x)# 3rd blockx = Conv2D(384, (3, 3), activation='relu', padding='same', name='block3_conv1')(x)# 4th blockx = Conv2D(384, (3, 3), activation='relu', padding='same', name='block4_conv1')(x)# 5th blockx = Conv2D(256, (3, 3), activation='relu', padding='same', name='block5_conv1')(x)x = MaxPooling2D((3, 3), strides=2, name='block5_pool')(x)# full connectionx = Flatten()(x)x = Dense(4096, activation='relu', name='fc1')(x)#     x = Dropout(0.5)(x)x = Dense(4096, activation='relu', name='fc2')(x)#     x = Dropout(0.5)(x)output_tensor = Dense(nb_classes, activation='softmax', name='predictions')(x)model = Model(input_tensor, output_tensor)return model
model = AlexNet(2,(height,width,3))

在对猫狗大战数据集进行分类识别时,网络的优化器采用的随机梯度下降法SGD,一开始采用的优化器是Adam,但是效果并不好。

model.compile(optimizer="sgd",loss=tf.keras.losses.BinaryCrossentropy(from_logits=True),metrics=['accuracy']
)

实验结果如下所示:

经过40个epochs之后,模型的准确率在90%左右,效果不错。

总结:本文主要是对AlexNet网络进行的分析,至于数据集的处理,并没有给出相应的代码,在博主之前的博客中,是有详细的代码的,与本文的代码相同。至于Dropout层的处理,路过的大佬可以试验一下效果。
努力加油a啊

深度学习之基于AlexNet实现猫狗大战相关推荐

  1. 深度学习实战—基于TensorFlow 2.0的人工智能开发应用

    作者:辛大奇 著 出版社:中国水利水电出版社 品牌:智博尚书 出版时间:2020-10-01 深度学习实战-基于TensorFlow 2.0的人工智能开发应用

  2. Python深度学习:基于TensorFlow

    作者:吴茂贵,王冬,李涛,杨本法 出版社:机械工业出版社 品牌:机工出版 出版时间:2018-10-01 Python深度学习:基于TensorFlow

  3. Python深度学习:基于PyTorch [Deep Learning with Python and PyTorch]

    作者:吴茂贵,郁明敏,杨本法,李涛,张粤磊 著 出版社:机械工业出版社 品牌:机工出版 出版时间:2019-11-01 Python深度学习:基于PyTorch [Deep Learning with ...

  4. 深度学习入门 基于Python的理论与实现

    作者:斋藤康毅 出版社:人民邮电出版社 品牌:iTuring 出版时间:2018-07-01 深度学习入门 基于Python的理论与实现

  5. 【深度学习】基于Pytorch进行深度神经网络计算(一)

    [深度学习]基于Pytorch进行深度神经网络计算(一) 文章目录 1 层和块 2 自定义块 3 顺序块 4 在正向传播函数中执行代码 5 嵌套块 6 参数管理(不重要) 7 参数初始化(重要) 8 ...

  6. 【深度学习】基于Pytorch进行深度神经网络计算(二)

    [深度学习]基于Pytorch进行深度神经网络计算(二) 文章目录 1 延后初始化 2 Pytorch自定义层2.1 不带参数的层2.2 带参数的层 3 基于Pytorch存取文件 4 torch.n ...

  7. 【深度学习】基于Pytorch的卷积神经网络概念解析和API妙用(一)

    [深度学习]基于Pytorch的卷积神经网络API妙用(一) 文章目录 1 不变性 2 卷积的数学分析 3 通道 4 互相关运算 5 图像中目标的边缘检测 6 基于Pytorch的卷积核 7 特征映射 ...

  8. 【深度学习】基于Pytorch的卷积神经网络概念解析和API妙用(二)

    [深度学习]基于Pytorch的卷积神经网络API妙用(二) 文章目录1 Padding和Stride 2 多输入多输出Channel 3 1*1 Conv(笔者在看教程时,理解为降维和升维) 4 池 ...

  9. 【深度学习】基于Pytorch多层感知机的高级API实现和注意力机制(三)

    [深度学习]基于Pytorch多层感知机的高级API实现和注意力机制(三) 文章目录 [深度学习]基于Pytorch多层感知机的高级API实现和注意力机制(三) 1 权重衰减 1.1 范数 1.2 L ...

最新文章

  1. mysql/mariadb centos7 修改root用户密码及配置参数
  2. matlab中find函数使用
  3. 关于ActionContext.getContext()的使用方法心得
  4. linux php源码包 安装openssl 和curl 扩展
  5. springcloud alibab + sentinel1.8.1集成文档
  6. 《ArcGis地图数据资料》(DataMap)ArcGis 9.0
  7. Azure Sentinel -- 云原生企业安全信息和事件管理平台(SIEM)初探系列一
  8. 亚信安全发布《2022年网络安全发展趋势及十大威胁预测》
  9. 深入剖析 linux GCC 4.4 的 STL string
  10. mac linux 权限 常用命令
  11. Java--ArrayList的遍历
  12. 一级计算机选择题汇总,计算机一级考试选择题汇总.pdf
  13. OMRON欧姆龙触摸屏维修NT620C-ST141-E
  14. C语言水电管理系统,小区水电费管理系统C语言.doc
  15. Maze勒索软件的最新样本分析
  16. Word最常用的100个通用快捷键
  17. 中国拳手徐灿将战世界拳王:有信心把金腰带带回祖国
  18. echarts设置图标图例legend为圆,长方形,扇形等
  19. html白色的斜线,面试官:如何使用 CSS 实现斜线效果?
  20. SaaSBase:什么是艾盟赢销SCRM?

热门文章

  1. MJRefresh的用法
  2. SQL注入——基于布尔的盲注(八)
  3. 在tomcat上部署项目需要打成jar_Spring Boot Web 项目教程,SpringBoot与传统Web 优缺对比...
  4. lamp mysql开机自启_centos下设置自启动和配置环境变量的方法
  5. api如何使用_记录API:技术作家和工程师指南
  6. mysql 导出dmp文件_MySQL数据库基础讲解
  7. sql注入pythonpoco_.NET EF(Entity Framework)详解
  8. python3字典写入excel_python3:excel操作之读取数据并返回字典 + 写入的案例
  9. java正则 找出数字_Java使用正则表达式实现找出数字功能示例
  10. 自动文本摘要(automatic text summarization)目前的研究方法分类