【调参实战】BN和Dropout对小模型有什么影响?全局池化相比全连接有什么劣势?...

maskrcnn_benchmark理解记录——关于batch norm、relu、dropout 的相对顺序以及dropout可不可用 ps: 1.如何在卷积神经网络中实现全局平均池化。在此之前,建议阅读ResNet这篇论文,以了解全局平均池化操作的好处。代替全连接层。 2.dropout只可能在box分支的两个全连接层那里,这个可以后期finetuning下。全连接网络可以使feature map的维度减少,进而输入到softmax,但是又会造成过拟合,可以用pooling来代替全连接。那就解决了之前的问题:要不要在f... 阅读详情

大家好,欢迎来到专栏《调参实战》,虽然当前自动化调参研究越来越火,但那其实只是换了一些参数来调,对参数的理解和调试在机器学习相关任务中是最基本的素质,在这个专栏中我们会带领大家一步一步理解和学习调参。

本次主要讲述图像分类项目中的BN层和Drouout层的调参对比实践,以及全连接层和池化层的对比实践。

作者&编辑 | 言有三

本文资源与结果展示

本文篇幅:3000字

背景要求:会使用Python和任一深度学习开源框架

附带资料:Caffe代码和数据集一份

同步平台:有三AI知识星球(一周内)

1 项目背景与准备工作

在卷积神经网络的设计中,早期出现的Dropout层可以降低模型过拟合的风险,增强模型的泛化性能。而随着Batch Normalization层的出现,Dropout逐渐被代替,Batch Normalization层不仅可以加速模型的训练,还在一定程度上缓解了模拟的过拟合风险。

与之类似,全连接层和全局池化层也是一对冤家,最早期的时候,对于分类任务来说网络最后层都是全连接层,但是因为它的参数量巨大,导致后来被全局池化层替代,那替换就一定是带来正向的结果吗?会不会有什么副作用?

这一期我们来对以上问题进行实践,本次项目开发需要以下环境:

(1) Linux系统,推荐ubuntu16.04或者ubuntu18.04。使用windows系统也可以完成,但是使用Linux效率更高。

(2) 最好拥有一块显存不低于6G的GPU显卡,如果没有使用CPU进行训练速度较慢。

(3) 安装好的Caffe开源框架。

2 Dropout和BN层实践

下面我们首先对Dropout和BN层进行实践,如果对这两者的理解不熟悉的,请查看往期文章:

【AI初识境】深度学习模型中的Normalization,你懂了多少?

【AI初识境】被Hinton,DeepMind和斯坦福嫌弃的池化,到底是什么?

本次的数据集和基准模型与上一期内容相同,大家如果不熟悉就去查看上一期的内容,链接如下:

【调参实战】如何开始你的第一个深度学习调参任务?不妨从图像分类中的学习率入手。

【调参实战】那些优化方法的性能究竟如何,各自的参数应该如何选择?

2.1 Dropout层

首先我们给基准模型添加Dropout层,它通常是被添加在网络靠后的位置,我们将其添加到conv5层后面,得到的模型结构如下:

完整的结构配置如下:

layer {

   name: "data"

   type: "ImageData"

   top: "data"

   top: "label"

   include {

     phase: TRAIN

   }

   transform_param {

     mirror: true

     crop_size: 224

     mean_value: 104.0

     mean_value: 117.0

     mean_value: 124.0

   }

   image_data_param {

     source: "list_train_shuffle.txt"

     batch_size: 64

     shuffle: true

     new_height: 256

     new_width: 256

   }

 }

layer {

   name: "data"

   type: "ImageData"

   top: "data"

   top: "label"

   include {

     phase: TEST

   }

   transform_param {

     mirror: false

     crop_size: 224

     mean_value: 104.0

     mean_value: 117.0

     mean_value: 124.0

   }

   image_data_param {

     source: "list_val_shuffle.txt"

     batch_size: 64

     shuffle: false

     new_height: 224

     new_width: 224

   }

 }

layer {

  bottom: "data"

  top: "conv1"

  name: "conv1"

  type: "Convolution"

  param {

    lr_mult: 1

    decay_mult: 1

  }

  param {

    lr_mult: 2

    decay_mult: 0

  }

  convolution_param {

    num_output: 64

    pad: 1

    kernel_size: 3    

    stride: 2

    weight_filler {

      type: "gaussian"

      std: 0.01

    }

    bias_filler {

      type: "constant"

      value: 0

    }

  }

}

layer {

  bottom: "conv1"

  top: "conv1"

  name: "relu1"

  type: "ReLU"

}

layer {

  bottom: "conv1"

  top: "conv2"

  name: "conv2"

  type: "Convolution"

  param {

    lr_mult: 1

    decay_mult: 1

  }

  param {

    lr_mult: 2

    decay_mult: 0

  }

  convolution_param {

    num_output: 64

    pad: 1

    kernel_size: 3

    stride: 2

    weight_filler {

      type: "gaussian"

      std: 0.01

    }

    bias_filler {

      type: "constant"

      value: 0

    }

  }

}

layer {

  bottom: "conv2"

  top: "conv2"

  name: "relu2"

  type: "ReLU"

}

layer {

  bottom: "conv2"

  top: "conv3"

  name: "conv3"

  type: "Convolution"

  param {

    lr_mult: 1

    decay_mult: 1

  }

  param {

    lr_mult: 2

    decay_mult: 0

  }

  convolution_param {

    num_output: 128

    pad: 1

    kernel_size: 3

    stride: 2

    weight_filler {

      type: "gaussian"

      std: 0.01

    }

    bias_filler {

      type: "constant"

      value: 0

    }

  }

}

layer {

  bottom: "conv3"

  top: "conv3"

  name: "relu3"

  type: "ReLU"

}

layer {

  bottom: "conv3"

  top: "conv4"

  name: "conv4"

  type: "Convolution"

  param {

    lr_mult: 1

    decay_mult: 1

  }

  param {

    lr_mult: 2

    decay_mult: 0

  }

  convolution_param {

    num_output: 128

    pad: 1

    stride: 2

    kernel_size: 3

    weight_filler {

      type: "gaussian"

      std: 0.01

    }

    bias_filler {

      type: "constant"

      value: 0

    }

  }

}

layer {

  bottom: "conv4"

  top: "conv4"

  name: "relu4"

  type: "ReLU"

}

layer {

  bottom: "conv4"

  top: "conv5"

  name: "conv5"

  type: "Convolution"

  param {

    lr_mult: 1

    decay_mult: 1

  }

  param {

    lr_mult: 2

    decay_mult: 0

  }

  convolution_param {

    num_output: 256

    pad: 1

    stride: 2

    kernel_size: 3

    weight_filler {

      type: "gaussian"

      std: 0.01

    }

    bias_filler {

      type: "constant"

      value: 0

    }

  }

}

layer {

  bottom: "conv5"

  top: "conv5"

  name: "relu5"

  type: "ReLU"

}

layer {

  name: "drop"

  type: "Dropout"

  bottom: "conv5"

  top: "conv5"

  dropout_param {

    dropout_ratio: 0.5

  }

}

layer {

    bottom: "conv5"

    top: "pool5"

    name: "pool5"

    type: "Pooling"

    pooling_param {

        kernel_size: 7

        stride: 1

        pool: AVE

    }

}

layer {

  bottom: "pool5"

  top: "fc"

  name: "fc"

  type: "InnerProduct"

    inner_product_param {

        num_output: 20

        weight_filler {

            type: "xavier"

        }

        bias_filler {

            type: "constant"

            value: 0

        }

    }

}

layer {

  name: "accuracy_at_1"

  type: "Accuracy"

  bottom: "fc"

  bottom: "label"

  top: "accuracy_at_1"

  accuracy_param {

    top_k: 1

  }

}

layer {

  name: "accuracy_at_5"

  type: "Accuracy"

  bottom: "fc"

  bottom: "label"

  top: "accuracy_at_5"

  accuracy_param {

    top_k: 5

  }

}

layer {

  bottom: "fc"

  bottom: "label"

  top: "loss"

  name: "loss"

  type: "SoftmaxWithLoss"

}

我们试验了两个不同比率,即Dropout=0.5和Dropout=0.9,优化参数配置如下:

net: "allconv6.prototxt"

test_interval:100

test_iter:15

base_lr: 0.01

lr_policy: "step"

stepsize: 10000

gamma: 0.1

momentum: 0.9

weight_decay: 0.005

display: 100

max_iter: 100000

snapshot: 10000

snapshot_prefix: "models/allconv6_"

solver_mode: GPU

其与基准模型试验结果对比如下:

可以看出,添加Dropout之后,模型明显要稳定很多,但是其性能稍微有所下降,这是因为基准模型本身就比较小,Dropout会降低模型的容量。Dropout=0.5和Dropout=0.9时性能差不多,这都是比较常用的配置,更小的比率预期会进一步降低模型的性能,大家可以进行尝试。

2.2 BN层

Dropout原理及作用 Dropout是作为缓解卷积神经网络CNN过拟合而被提出的一种正则化方法,它确实能够有效缓解过拟合现象的发生,但是Dropout带来的缺点就是可能会减缓模型收敛的速度,因为每次迭代只有一部分参数更新,可能导致梯度下降变慢。......... 阅读详情

相关推荐

Dropout 对梯度传播的影响有哪些?为什么Dropout能够提升模型性能?

作者:禅与计算机程序设计艺术 1.简介 随着深度学习技术的飞速发展,卷积神经网络(CNN)等模型逐渐成为图像、文本、声音等多种领域中的一个热门方向。其中,dropout 也是一种比较热门的技术,它被广泛应用在许多深度学习的模型中。在本文中,我们将对 dropout 的基本原理进行介绍,并从理论上阐述其对

AI天才研究院 1627

【深度学习笔记3.2 正则化】Dropout

关于dropout的理解与总结: dropout是什么?参考文献[1] dropout会让train变差,让test变好。一般的如果在train-set上表现好,在test-set上表现差,用dropout才有效果。使用dropout是为了避免过拟合。(来自网友) 下图来自文献[3]   上图中的思想就是说:Dropout是一种正则化技术,是防止过拟合最有效的方法,然而在以下几种情况下使用dr...

春播秋忙 1359

BN和Dropout在训练和测试时的差别?

这样做的效果类似于训练多个不同的神经网络,然后将它们集成在一起,从而减少模型对某些特定神经元的依赖。它通过在训练过程中随机地丢弃一部分神经元的输出,从而强制模型在不同的子集上进行训练,减少神经元之间的耦合,提高模型的泛化能力。总之,BN和Dropout在训练和测试阶段的操作有所不同,这是为了确保模型在不同阶段的行为一致性,并在测试阶段保持预测结果的稳定性。总之,Dropout是一种有效的正则化技术,常用于深度神经网络中,特别是在训练数据较少或网络复杂度较高时,可以帮助提升模型的泛化能力和稳定性。

优快云 精品推荐 713

深度学习的诀窍

目录1、简述2、当模型在测试数据上性能较差时不要总以为是过拟合3、深度学习提出的方法是应用在哪一方面的?3.1 模型在训练数据上效果不好3.1.1 更换激活函数——ReLU3.1.2 自适应参数学习率3.2 模型在测试数据上效果不好3.2.1 早停3.2.2 正则化3.2.3 Dropout 1、简述 深度学习模型训练分成三部分: Step1: define a set of function ...

然后就去远行 1426

深度学习中Dropout技术的原理与应用

深度学习模型主要由输入层、隐藏层和输出层组成。输入层接收原始数据,隐藏层负责提取特征并进行复杂计算,输出层则产生最终结果。神经元通过权重连接,实现数据的传递和转换。graph TDA[输入层] -->|数据流| B[隐藏层1]B --> C[隐藏层2]C -->|...| D[隐藏层n]D --> E[输出层]Dropout是深度学习中的一种技术,主要用于避免神经网络模型的过拟合现象。

weixin_42527589的博客 1278

制作Ubuntu22.04启动盘

现在越来越多程序代码都需要运行在linux环境下,运行这些代码的前提是安装一个稳定的linux操作系统。本文选择Ubuntu 22.04去制作系统启动盘。本文主要对ubuntu22.04的启动盘制作过程进行了详细的说明,希望能帮助到有需要的朋友。

lyx_ok的博客 1万+

dropout 对于整个深度神经网络的影响

在进行图像分割时,发现一个问题,在不加dropout 时整个模型的训练准确率可以很快的提升,但是验证集的准确率很难提升上去。但是在加了dropout 之后,发现模型训练集准确率提升就会很慢,也很难达到没有加入dropout的效果。验证集的准确率提升的并没有想象的那么明显。所以怀疑dropout的加入对于整个网络模型的提升到底有多大。看了相关文章说dropout对于模型准确度的提升没有想象的那么有作...

skyfengye的博客 4817

实战指南:如何用Kamailio+FreeSWITCH搭建高并发企业通信系统(附配置模板)

本文提供了一份实战指南,详细介绍了如何利用Kamailio与FreeSWITCH构建高并发企业通信系统。通过将Kamailio作为高性能SIP信令平面处理路由与负载均衡,FreeSWITCH作为媒体与应用平面负责通话与业务逻辑,实现信令与媒体分离的电信级架构。文章深入解析了架构设计、核心配置、集群部署与性能优化,并附有配置模板,旨在帮助企业构建可水平扩展、高可用的通信解决方案。

dell8的博客 364

训练过程中验证精度高于训练精度可能的原因

训练过程中验证精度要高于训练精度的原因

Kelly_Ai_Bai的博客 2758

别再只盯着DDR5了!聊聊3D DRAM:它凭什么能解决AI算力的内存墙难题?

本文深入探讨了3D DRAM技术如何突破AI算力的内存墙限制。通过立体堆叠架构,3D DRAM在存储密度、带宽和延迟方面实现显著提升,有效解决AI训练和推理中的内存瓶颈问题。文章还分析了三星、SK海力士等巨头的技术路线图,并指出商业化面临的挑战与机遇。

weixin_42685438的博客 189

在 RAP 里把编号这件事做得既优雅又合规:Early Numbering 与 Late Numbering 的落地指南

本文探讨了 SAP RAP 框架中的三种主键编号策略及其适用场景。文章首先指出传统 ABAP 应用中主键处理的局限性,详细分析了早期编号(外部/内部)和延迟编号的差异,强调延迟编号在避免业务断号方面的优势。通过 Partner 业务对象案例,文章演示了延迟编号的实现方法,包括行为定义配置、保存类实现和编号分配逻辑。同时指出测试中常见的校验陷阱,并提醒生产环境应避免简单的 MAX+1 方案,建议采用原子取号机制确保并发安全。全文从业务合规性和技术实现两个维度,为 RAP 应用的编号策略选择提供了实用指导。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1849

BN层和Dropout层一起使用存在方差共存

如何通过方差偏移理解批归一化与Dropout之间的冲突 | 机器之心 BN和Dropout共同使用时会出现的问题_小岁月太着急-优快云博客_bn和dropout 把Dropout放在所有BN层的后面就可以了,这样就不会产生方差偏移的问题 ...

tangweirensheng的博客 1115

SPICE仿真软件:HSPICE_(20).HSPICE仿真结果的后处理

HSPICE仿真结果的后处理是一个多步骤的过程,包括读取结果文件、可视化、分析和导出。通过使用命令行工具、Python脚本和HSPICE内置工具,可以高效、准确地完成这些任务。Python脚本的灵活性和强大的数据分析能力使其成为后处理的理想选择。自动化处理可以显著提高工作效率,减少人为错误,而高级分析方法可以更深入地理解仿真结果,为电路设计提供有力支持。

kkchenjj的博客 1382

深度学习回归任务要谨慎使用Dropout

由于回归问题输出是一个绝对值,对这种变化就很敏感,但是分类问题输出只是一个相对的logit,对这种变化就没那么敏感,因此,在回归问题上最好可以少用dropout(看情况),而在分类问题上可以用dropout。不过,根据上面的分析,其实dropout最好是不要加在网络的中间,在最后输出层前面加一般应该还是没问题的,不会有明显的性能损失,但也不会有提高,因此,回归任务要谨慎使用dropout。

qq_53250079的博客 2519

com.sap.aii.af.service.cpa.CPAObjectNotFoundException: Couldn‘t retrieve inbound binding

错误消息:错误截图:该错误通常表示在集成配置中,未找到与特定消息匹配的入站绑定(Inbound Binding)。具体而言,错误消息中的 P/S/A(Party/Service/Action)值未在配置中找到对应的入站绑定。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 374

基于FPGA的相控阵雷达波束控制系统设计(2)

也就是在计算波控码时0,按2.8125递增,取遍-90

qq_43416206的博客 1812

卷积、池化、BN、Drop-out的位置

Drop-out和BN层可以同时使用,常用的组合形式如下: CONV/FC -> BN -> ReLu -> Dropout -> CONV/FC 转载于:https://www.cnblogs.com/yeran/p/11007849.html

weixin_30439067的博客 1981

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

Batch Normalization和Dropout如何搭配使用?

Batch Normalization和Dropout如何搭配使用?背景分析解决方案参考资料 背景 众所周知,在Batch Normalization(BN)出来之前,dropout是训练神经网络时的标配,如果你的数据不够多,那么模型很容易过拟合,导致模型的性能下降。Dropout在很多任务上证明了自己的有效性,比如图片分类,语音识别,目标检索等等。但是在BN提出之后,dropout突然失宠了,原...

hexuanji的博客 1万+

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

机器学习入门知识点

ResNet的不同变种,如ResNet-18、ResNet-34、ResNet-50等,具有不同的深度和性能,可根据任务和计算资源的要求进行选择。ResNet的核心思想是,通过引入残差块,网络可以轻松地学习恒等映射(identity mapping),从而能够更轻松地学习更深层次的特征。总体而言,ResNet架构的创新极大地推动了深度学习的发展,为解决深层神经网络训练中的问题提供了有效的方法。最终,这些权重与对应位置或特征的值相乘,并求和,形成加权和,作为输出的一部分。

weixin_53384447的博客 967

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

训练神经网络失败的原因(下)

上半部分 原文链接 4. 没有正则化 正则化典型的就是dropout、加噪声等。即使数据量很大或者你觉得网络不可能出现过拟合,但是对网络进行正则化还是很有必要的 dropout 通常从设定参数为0.75或0.9开始,根据你认为网络出现过拟合的可能性来调整这个参数。另外,如果你确定这个网络不会出现过拟合,那么可以将参数设定为0.99。 正则化不仅仅可以防止过拟合,并且在这个随机过程中,...

baidu_38401528的博客 6369

卷积神经网络---池化层

在神经网络中,我们经常会看到池化层,常用的池化操作有四种:mean-pooling(平均池化),max-pooling(最大池化)、Stochastic-pooling(随机池化)和global average pooling(全局平均池化),池化层有一个很明显的作用:减少特征图大小,也就是可以减少计算量和所需显存。 ***mean-pooling(平均池化):***即对邻域内特征点只求平均 优缺点:能很好的保留背景,但容易使得图片变模糊 正向传播:邻域内取平均 反向传播:特征值根据领域大小被平均,然后传

weixin_45698190的博客 4430

DropPath或drop_path正则化(通俗易懂)

DropPath或drop_path正则化

ZhengrongYue的博客 1万+

spatial transformer networks

Kevin Zakka's Blog 在ConvNN中,我们通常使用池化层来提供空间不变性,池化层可以将复杂的图像划分为cells,每个小网格监测信息描述输出,而不用关注其位置信息。 但是池化层有以下缺点:1)丢弃了75%的特征激活,使我们丢失位置信息,但视觉认知任务中这是非常重要的。2)池化是Local and predefined,小的感受野会影响网络更深的层,使中间特征图经受更大的输入失真,但增大感受野又会使下采样特征图太激进。 即由一个受限的预定...

雪招在等开花 1604

对BN(batch normlization)层的理解

前言:BN层作为当前应用十分广泛的一中抗过拟合、加速模型收敛的手段,效果可以说是十分好用,但是究其原因或者说理解,很多人也是从不同方面有所解释,这篇就尽量包罗的多一些,加上一些自己的理解。有时间就补一点的样子,慢慢写 BN层简述: BN层是神经网络里的一层,如同卷积、池化层等等一样,同样有数据的输入、输出,同时参与正向传播和反向传播。但是不太同于其他层的特点是,BN更像是其他类型层的一种数据的预处...

赵凯月的博客 2761

CNN中各种池化操作的简单总结

对于卷积神经网络中常出现的各种池化操作的含义以及它们各自的优缺点进行了总结。

m0_47623548的博客 1703
上一篇: 【知识星球】关于模型压缩,有三AI知识星球近一个月从模型精简,硬件实现,到模型剪枝分享了哪些内容...
下一篇: 【总结】有三AI秋季划图像质量组3月直播讲了哪些内容,为什么解决好底层图像处理问题那么重要...
言有三
言有三 领域专家: 人工智能技术领域 领域专家: 人工智能技术领域
博客等级 码龄15年 3635粉丝 976原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

打赏作者

言有三

三人行必有AI

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

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

打赏作者

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

抵扣说明:

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

余额充值