Batch Normalization论文解读与Inception V2代码简析

2024-02-04 03:48

本文主要是介绍Batch Normalization论文解读与Inception V2代码简析,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

  • 论文阅读

  • 代码简析

  • 小结

论文阅读

Inception V2是Inception家族的一个中间件产物,在论文Rethinking the Inception Architecture for Computer Vision中提到了Inception V2的概念,但是google的代码实现却是命名为Inception V3。从google实现的Inception V2源码可以看出V2的改进主要是以下两点:

  • 使用了Batch Normalization,Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift
  • 用两个3x3Convolution替代一个5x5Convolution,Rethinking the Inception Architecture for Computer Vision

此文论文阅读只会学习一下Batch Normalization这篇论文,Rethinking the Inception Architecture for Computer Vision这篇论文在学习Inception V3的网络的时候再仔细阅读。

1.前言

训练深度神经网络的时候每一层的输入会随着训练发生变化,因为前一层参数的变化会引起这一层输入的分布发生变化,作者把这种现象叫做internal covariate shift。这种现象会导致我们需要设置更小的learning rate,需要很小心设置参数的初始值,否则网络可能训练变慢难以收敛。作者提出了一种batch normalization的方式来解决这个问题。试验下来如果使用BN只需1/14的训练次数可以达到同样的精确度,并且可以让我们在ImageNet Classification的TOP5 error达到4.9%。

2.BN介绍

如果训练集和测试集的分布不同,即样本之间存在covariate shift,这种情况会影响训练的精度。而internal covariate shift是指数据通过一层一层网络传播的过程中,由于参数的变化,而引起激活值分布发生变化。而且如果网络非常深,每一层的激活值可能越来越分散,如果用sigmoid激活函数,越来越大的x值可能导致导数接近0,这就是梯度消失的原因,梯度消失会导致训练越来越缓慢而难以收敛。而使用Relu激活并且合适的参数初始化和较小的学习率可以改善这个现象,但是数据仍有发散的可能性。

作者提出的batch normolization,可以缓解Internal Covariate Shift,加速深度神经网络的训练速度。使用BN后可以允许使用更高的学习率,而不会有发散的风险,BN也有轻微正则化模型的效果。并且使用BN后即使是用sigmoid激活函数,也不会有梯度消失的现象。

这篇关于Batch Normalization论文解读与Inception V2代码简析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/676272

相关文章

解读GC日志中的各项指标用法

《解读GC日志中的各项指标用法》:本文主要介绍GC日志中的各项指标用法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、基础 GC 日志格式(以 G1 为例)1. Minor GC 日志2. Full GC 日志二、关键指标解析1. GC 类型与触发原因2. 堆

Java设计模式---迭代器模式(Iterator)解读

《Java设计模式---迭代器模式(Iterator)解读》:本文主要介绍Java设计模式---迭代器模式(Iterator),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,... 目录1、迭代器(Iterator)1.1、结构1.2、常用方法1.3、本质1、解耦集合与遍历逻辑2、统一

Java中调用数据库存储过程的示例代码

《Java中调用数据库存储过程的示例代码》本文介绍Java通过JDBC调用数据库存储过程的方法,涵盖参数类型、执行步骤及数据库差异,需注意异常处理与资源管理,以优化性能并实现复杂业务逻辑,感兴趣的朋友... 目录一、存储过程概述二、Java调用存储过程的基本javascript步骤三、Java调用存储过程示

Visual Studio 2022 编译C++20代码的图文步骤

《VisualStudio2022编译C++20代码的图文步骤》在VisualStudio中启用C++20import功能,需设置语言标准为ISOC++20,开启扫描源查找模块依赖及实验性标... 默认创建Visual Studio桌面控制台项目代码包含C++20的import方法。右键项目的属性:

MySQL之InnoDB存储页的独立表空间解读

《MySQL之InnoDB存储页的独立表空间解读》:本文主要介绍MySQL之InnoDB存储页的独立表空间,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、背景2、独立表空间【1】表空间大小【2】区【3】组【4】段【5】区的类型【6】XDES Entry区结构【

MySQL数据库的内嵌函数和联合查询实例代码

《MySQL数据库的内嵌函数和联合查询实例代码》联合查询是一种将多个查询结果组合在一起的方法,通常使用UNION、UNIONALL、INTERSECT和EXCEPT关键字,下面:本文主要介绍MyS... 目录一.数据库的内嵌函数1.1聚合函数COUNT([DISTINCT] expr)SUM([DISTIN

Java实现自定义table宽高的示例代码

《Java实现自定义table宽高的示例代码》在桌面应用、管理系统乃至报表工具中,表格(JTable)作为最常用的数据展示组件,不仅承载对数据的增删改查,还需要配合布局与视觉需求,而JavaSwing... 目录一、项目背景详细介绍二、项目需求详细介绍三、相关技术详细介绍四、实现思路详细介绍五、完整实现代码

Go语言代码格式化的技巧分享

《Go语言代码格式化的技巧分享》在Go语言的开发过程中,代码格式化是一个看似细微却至关重要的环节,良好的代码格式化不仅能提升代码的可读性,还能促进团队协作,减少因代码风格差异引发的问题,Go在代码格式... 目录一、Go 语言代码格式化的重要性二、Go 语言代码格式化工具:gofmt 与 go fmt(一)

MySQL主从复制与读写分离的用法解读

《MySQL主从复制与读写分离的用法解读》:本文主要介绍MySQL主从复制与读写分离的用法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、主从复制mysql主从复制原理实验案例二、读写分离实验案例安装并配置mycat 软件设置mycat读写分离验证mycat读

Python的端到端测试框架SeleniumBase使用解读

《Python的端到端测试框架SeleniumBase使用解读》:本文主要介绍Python的端到端测试框架SeleniumBase使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全... 目录SeleniumBase详细介绍及用法指南什么是 SeleniumBase?SeleniumBase