【深度学习卷积神经网络中涉及的训练参数与超参数概念理解】

2023-05-16

【卷积神经网络中涉及的训练参数与超参数概念理解】

  • 文前白话
    • Ⅰ、 网络超参数
      • 1. 输入图像大小
      • 2. 卷积层超参数
        • 卷积核尺寸、卷积核数量、卷积的步长
      • 3. 池化层超参数
        • 池化核尺寸、池化步长、池化方式
    • Ⅱ 、网络训练、优化超参数
      • 1、Epoch、Batch、Batch_size、Iteration(迭代)、学习率 Ir
      • 2.神经网络优化的改善方法
  • reference

文前白话

在深度学习领域,参数(parameter)和超参数(hyperparameter)是两个相似但本质不同的概念。超参数是用来确定模型的一些参数,一般是根据经验和验证集效果确定的变量,超参数不同,模型是不同的。在卷积神经网络中,超参数有学习速率、迭代次数、层数、每层神经元的个数、批大小(batch size)及损失函数中各部分的权值等。而参数是可以根据模型自身的算法,通过数据迭代自动学习出的变量,如卷积核的权值w、偏置b等。如果将态积神经网络的训练看成多项式拟合问题,那么超参数是最高项次数,参数是各次项的系数。其中,参数可以用最小二乘法求解而超参数只能先人工设定,再根据验证集上的效果选取最优的

在这里插入图片描述

Ⅰ、 网络超参数

创建整个神经网络模型前,首先要指定与网络结构相关的超参数,如输入图像大小、卷积层和池化层以及网络训练、优化相关超参数。

1. 输入图像大小

卷积神经网络结构是固定的,当处理不同尺寸图像时,卷积层的输出特征图尺寸也会随着输入图像大小而改变。尽管这对于分割问题的全卷积结构或检测问题的Rol pooling结构没有影响,但是会造成分类问题的全连接层输入维度不一致,因此需要在数据集处理中将图像尺寸调整到固定大小,使不同输入图像获得相同规格的输出。
图像大小的选择要考虑多方面因素,为充分利用GPU效率,一些通用数据集的图像尺寸是固定的,如CIFAR-10中的图像为32×32像素,STL数据集中的图像为96×96像素。
AlexNet 和VGG等经典模型的官方版本输入图像大小为224×224像素,如果要使用其全部参数,可选择默认大小、否则无法使用其全连接层参数,需要重新定义全连接层甚至卷积层。卷积神经网络的本质是模拟人脑对图像的感知,更高分辨率的图像有利于提升学习效率,但是,会增加全连接层单元的个数,从而大大增加计算量,这时可以增加1个卷积池化层,在增加表达能力的情况俩下减少参数数量

2. 卷积层超参数

卷积核尺寸、卷积核数量、卷积的步长

卷积层的超参数包括卷积核尺寸、数量及卷积的步长等。通常认为较小尺寸的卷积核能够在相同参数数量下增加网络容量和模型复杂程度,并减少卷积核个数,因此经典的网络如LeNet-5、VGG-19、Inception 网络使用3×3、5×5甚至1×x1结构,而在实践中最常用的尺寸为3×3、5x5。也有工作使用不同尺寸卷积操作并联,提取不同分辨率特征。

由于卷积操作对图像的边界有影响,因此在卷积前通常进行填充操作,可以充分利用图像的边缘信息,搭配合适的卷积步长以便控制图像输出大小,避免随着网络深度的增加,图像尺寸急剧下降。
卷积的步长主要用于控制输出分辨率,如果填充操作使图像大小不变,步长为2的卷积输出为输入的1/4(长宽皆为1/2),对于一些需要降分辨率操作非常有效。
空洞卷积(dilated convolution)是一种有效的减少卷积参数的手段,设置了固定空洞大小的卷积核在前后卷积层级联,可以大大增加感受野,达到大的卷积核无法获得的效果。

卷积操作的输出尺寸不大于输入尺寸,而在图像到图像的生成任务中却需要增大图像大小,此时可以采用反卷积(又称转置卷积,transposed convolution)。反卷积本质上是一种分数步长卷积,是将输入图像内插变大后按卷积步骤的操作,内插也是超参数。

3. 池化层超参数

池化核尺寸、池化步长、池化方式

池化层一般没有参与运算的参数,它的超参数主要是池化核尺寸、池化步长及池化方式
池化的目的保留大的响应值并降低分辨率,与卷积层类似,池化核尺寸一般也设定为此较小的值,如2×2、3×3等,常用的是尺寸为2x2、步长为2。此外,池化方式也是可选超参数,
“用的有最大池化(Mx Poling)、平均池化(Avamge Pooling)、K-iMax Poling等

Ⅱ 、网络训练、优化超参数

1、Epoch、Batch、Batch_size、Iteration(迭代)、学习率 Ir

卷积神经网络训练可视为最小化损失函数的过程,训练网络需要初始化参数,设置合适的学习率,选择合适的批量归一化方法,再根据优化算法和策略不断迭代、更新参数,涉及的超参数有:Epoch(回合)、Batch(批)、Batch_size、iteration(迭代)、学习率 lr 等。

Epoch(回合): 将全部的训练集数据投入神经网络模型完成一次完整的训练,这个过程称为一个Epoch。简单理解epoch的值就是整个训练集数据被输入神经网络训练了几次。

随着 Epoch 数量增加,神经网络中的权重的更新次数也增加,网络训练的结果会有欠拟合或者过拟合

Batch:使用训练集中的一小部分数据样本对模型权重进行一次反向传播的参数更新,这一小部分样本数据被称为:“一批数据”

因为算力或者其他原因,不能将数据一次性通过神经网络的时候,就需要将数据集分成几个 batch,也就有了Batch_Size(一次投入网络模型中的图片数)

batch_size主要用于批量梯度下降算法(Batch Gradient Descent)中,批量梯度下降算法是每次迭代都遍历批中的所有样本,由批中的样本共同决定最优的方向,Batch_Size 正是批中的样本数量。

在训练深度神经网络时,训练数据的规模通常都比较大,如果在梯度下降时,每次迭代都要计算整个训练数据上的梯度,这就需要比较多的计算资源.另外大规模训练集中的数据通常会非常冗余,也没有必要在整个训练集上计算梯度.因此,在训练深度神经网络时,经常使用小批量梯度下降法(Mini-Batch Gradient Descent).

对梯度下降优化算法不同方式的理解:
每次的参数更新的方式不同

基本梯度下降(BGD),基本的梯度下降算法使用所有的样本计算梯度,称为批量梯度下降(Batch Gradient Descent)。BGD一次迭代是 对所有样本进行计算,由全数据集确定的负梯度方向能够更好地代表 样本总体,从而更准确地朝向极值所在的方向。当目标函数为凸函数时,BGD一定能够得到全局最优。然而在深度学习问题中,通常数据集很大,计算成本很高,并且所有样本取平均的负梯度方向通常使得收敛很慢,可能会陷人局部极小。不支持在线学习。

随机梯度下降( Stochastic Gradient Descent. SGD )随机梯度下降在每轮迭代中随机使用1个样本xi来计算梯度并进行参数更新: 由于只在单个样本上计算梯度,使得每轮参数更新大大加快,但同时增加了不确定性,可能会陷人局部极小,也可能会跳出局部极小,搜索过程随机性大。造成收敛性能不太好,就会在最优点附近晃来晃去,获取不到最优点。两次参数的更新也有可能互相抵消掉,造成目标函数震荡的比较剧烈。
小批量梯度下降(Mini-Batch GD)
这种方法把数据分为若干个批,按批来更新参数,每次用1个批量(batch sie )的样本计算梯度并更新,一个批中的一组数据共同决定了本次梯度的方向,下降起来就不容易跑偏,减少了随机性。是BGD和SGD的折中,Mini-Batch GD使得每轮迭代的计算量较少,训练时目标函数下降的随机性减小, batch size 可在收敛速度和内存、显存消耗上灵活选择,因此是深度学习的最常用策略。

梯度下降法的几种方式的根本区别就在于上面公式中的 Batch Size不同:

梯度下降方式训练集样本数Batch_sizeNumber of banchs
基本梯度下降(BGD)NN1
随机梯度下降(SGD)N1N
小批量梯度下降(Mini-Batch)NBN/B or N/B + 1
N / B + 1 是针对未整除的情况; 整除则是 N / B

Batch_Size的设置与参考因素:

在计算机硬件显存能允许的情况下,Batch_Size数值大,收敛速度是比较快,但有时会陷入局部最小的情况;Batch_Size数值小,引入的随机性会更大些,有可能会有更好的效果,但是收敛速度会慢一些;当Batch_Size太小,而类别数又比较多的时候,会导致loss函数震荡而不收敛。
具体调试过程中,一般可根据GPU显存,设置为最大,Batch_Size数值通常设为2的n次幂,常用的包括64,128,256。实际训练时候,可以选择一部分数据,跑几个Batch看看loss是否在变小,再选择合适的Batch_Size。每完成Batch_Size个样本,网络会更新一次参数。

iteration(迭代): 训练时,1个batch训练图像通过网络训练一次​(一次前向传播+一次后向传播),每迭代一次权重更新一次;测试时,1个batch测试图像通过网络一次​(一次前向传播)
iteration(迭代)就是使用一个batch数据对模型进行一次参数更新的过程

比如对于一个有 5000 个训练样本的数据集。将 5000 个样本分成大小为 100 的 batch(batch_size = 100, number of bachs = 5000/100 = 50),那么完成一个 epoch 需要 50个 iteration。

即是:1个epoch包含的iteration次数=样本数量/batch_size
整体的迭代次数:iterations = epochs×(images / batch_size)

小栗子理解:

假如你的数据集训练集数据有11000张图片, 划分训练集(10000)和验证集(1000)。若选择Batch_size = 128 对网络模型进行训练,则有:

  • 1 个 Epoch 要投入网络训练的图片数量: 10000
  • 数据集对应的 Batch 数值: 10000/128 = 78 + 1 =79 (非整除)
  • 每个 Epoch 需要完成的 Batch 个数: 79
  • 每个 Epoch 具有的 Iteration 个数: 79
  • 每个 Epoch 中发生模型权重更新的次数:79
  • 训练 100 代后(Epoch = 100),模型权重更新的次数:79 * 100 = 7900

学习率 lr

学习率是神经网络优化时的重要超参数.在梯度下降法中,学习率的取值非常关键,学习率决定了参数移动到最优值的速度快慢,如果学习率过大,很可能会越过最优值导致函数无法收敛,甚至发散;反之,如果学习率过小,优化的效率可能过低,收敛速度太慢,也易使算法陷入局部最优。合适的学习率应该是在保证收敛的前提下,能尽快收敛

常用的学习率调整方法包括学习率衰减、学习率预热、周期性学习率调整以及一些自适应调整学习率的方法,比如AdaGrad、RMSprop、AdaDelta等.自适应学习率方法可以针对每个参数设置不同的学习率。

在小批量梯度下降法中,当批量大小设置较大时候,通常要配置较大的学习率。但是,在刚开始训练时,由于参数是随机初始化的,梯度也往往比较大,再加上较大的学习率,会使得训练不稳定。为了提高训练稳定性,我们可以在最初几轮迭代时,采用比较小的学习率,等梯度下降到一定程度后再恢复到初始的学习率,这种方法称为学习率预热(Learning Rate Waarmup)

设置较好的learning rate,需要不断尝试。在一开始的时候,可以将其设大一点,这样可以使weights快一点发生改变,在迭代一定的epochs之后人工减小学习率。

2.神经网络优化的改善方法

改善神经网络优化的目标是找到更好的局部最小值和提高优化效率,目前比较有效的经验性改善方法通常分为以下几点:

(1)使用更有效的优化算法,来提高梯度下降优化方法的效率和稳定性,此如动态学习率调整、梯度估计修正等。
(2)使用更好的参数初始化方法数据预处理方法来提高优化效率。
(3)修改网络结构来得到更好的优化地形(Optimization Landscape),比如使用ReLU激活函数、残差连接、逐层归一化等。
优化地形:指在高维空间中损失函数的曲面形状,好的优化地形通常比较平滑。
(4)使用更好的超参数优化方法
通过上面的方法,我们通常可以高效地、端到端地训练一个深度神经网络。

reference

https://blog.csdn.net/yimingsilence/article/details/79217180
https://blog.csdn.net/yudiemiaomiao/article/details/72391316
https://blog.csdn.net/qq_36447181/article/details/80149590
https://blog.csdn.net/qq_18668137/article/details/80883350
https://zhuanlan.zhihu.com/p/29409502

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【深度学习卷积神经网络中涉及的训练参数与超参数概念理解】 的相关文章

  • curl命令模拟get请求时遇到特殊字符{}被过滤异常处理

    curl命令模拟get请求时遇到特殊字符 xff0c 接口接受参数不符合预期 crul请求 curl GET http test com opdgApply pageNum 61 1 amp sortDesc 61 true amp sea
  • 函数声明在头文件中的好处,可以利用静态库隐藏算法

    背景 xff1a 现在有个程序员A想实现一个算法 xff0c 这个算法是俩数之和 xff0c 他自己不会于是他去买程序员B的已经做好的算法 xff0c 但是程序员B不想让他看到算法结构应该怎么做 1 首先程序员B需要写程序 xff0c 包括
  • Javaparser使用

    Javaparser使用 什么是Javaparser 分析 转换 生成Java代码 Javaparser库为你提供了一个 Java 代码的抽象语法树 Abstract Syntax Tree AST 结构允许您以一种简单的编程方式使用 Ja
  • YUV和RGB图像格式说明

    对于进行图像处理的程序员来说 xff0c 图像格式是必须了解的问题 本文不涉及压缩图像格式 xff0c 只对YUV和RGB图像进行描述 1 RGB图像和YUV图像区别 RGB和YUV图像的区别在于色彩空间坐标系描述上不同 xff0c 就如同
  • CMake 常用指令

    文章目录 范式环境 amp 工程配置 96 cmake minimum required 96 96 project 96 96 file 96 添加头文件搜索路径 96 link directories 96 96 add compile
  • (JAVA)国际跳棋--棋里乾坤

    导入 因为假期内被朋友带入坑后起了兴趣 xff0c 但发现网上似乎没有什么人写过国际跳棋的相关制作过程 xff0c 于是制作了一个单纯的java的国际跳棋程序 xff0c 虽然没有AI xff0c 但能够实现玩家双方的任务和皮肤 目前只设置
  • 力扣刷题日记 211. 添加与搜索单词

    211 添加与搜索单词 题目描述题解思路代码结语 题目描述 题解思路 首先 xff0c 这道题要求我们给出所有结果 xff0c 那就意味着我们可能只能选择枚举这一条路 xff0c 然后再看到数据范围 xff0c 好家 伙 xff0c 确实挺
  • 力扣刷题日记 798. 得分最高的最小轮调

    798 得分最高的最小轮调 题目描述题解思路代码结语 题目描述 题解思路 数据范围没有截图到 xff0c 这里的数据范围为0 20000 题目的内容还是很好理解的 xff0c 就是给你一个数组 xff0c 你可以将数组内容向左推移若干次 x
  • Java实现简单的计算器

    文章目录 前言一 主界面部分二 监听器部分三 结果计算部分总结 前言 最近在复习着Java Swing的使用 xff0c 在布局这块反复又看了很久 xff0c 然后突然发现GirdLayout机器适合来做一个计算器的简单样子 xff0c 所
  • 多旋翼飞行器设计与控制(一)

    一 基本概念固定翼直升机多旋翼复合飞行器 二 操控和评价四旋翼操控对比评价局限性 三 发展历史休眠期 xff08 1990前 xff09 复苏期 xff08 1990 2005 xff09 产品方面学术方面 发展期 xff08 2005 2
  • 考试中暴露的问题

    1 注意位运算 可以去看看洛谷里如果城堡不用位运算处理的话会怎样233 2 注意数学函数 xff0c 如sqrt为开根号 xff0c abs为绝对值 xff1b 3 最长上升子序列upper bound与lower bound的用法要知道
  • 10月28日考试解题报告

    考试中的心路历程 说实话第一道题和第三道题真的是水题 xff0c 然鹅我只搞到了100分 xff0c 感觉有些亏 xff0c 最后一题看错了题目 xff0c 导致我的思路开始各种螺旋 xff0c 当其他人都为第二题思考的时候 xff0c 我
  • 10月30日解题报告

    做题思路 第一题表示根本没有想到是线段树这种东西 xff0c 结果看到题解的时候 内心是崩溃的 xff0c 看了线段树还是得多练练 xff0c 第二题是dp xff0c 算是简单 xff0c 但是自己没有想到还是很伤 xff0c 也还是要多
  • C++ 获取string字符串长度的三种方法

    1 用string的成员方法length 获取字符串长度 length 比较直观 xff0c 表示的就是该字符串的长度 include lt string gt include lt iostream gt using namespace
  • sublime text3 搭建python环境

    1 python下载 python安装文件下载 2 安装easy install 方法是下载ez setup py后 xff0c 在cmd下执行 pythonez setup py xff0c 即可自动安装setuptools window
  • C++ 字符串指针和字符串指针数组详解

    C 43 43 处理字符串有两种方式 xff0c 即 xff1a 指针方式和数组方式 数组方式 xff1a char a 61 34 HelloWorld 34 指针方式 xff1a const char s 61 34 HelloWorl
  • 【C++笔记】关于push_back(vector<int>());

    vector lt vector lt int gt gt vec vec push back vector lt int gt vec back push back vec n push back 今天在刷leetcode题的时候见到如上
  • C++ const用法总结

    const 是constant的简写 xff0c 是C 43 43 中极为常见且重要的关键字 xff0c 主要功能是设置某些参数不可修改 xff0c 今天对其用法进行总结记录 一 在变量中的用法 对变量进行修饰是const最基本的用法 xf
  • C++ 函数指针以及对void*(* func)(void *)的解读

    1 函数指针 我们知道调用一个函数的时候可以给其传递参数 xff0c 这个参数可以是变量 xff0c 也可以是变量的引用或者指针 那如果想传递另一个函数可以做到吗 xff1f C提供了函数指针这一用法来完成这个需求 函数在内存中是占据一片空

随机推荐

  • 线程同步之互斥锁

    1 问题 单线程执行任务的场景通常是简单不易出错的 xff0c 但是多线程执行任务时 xff0c 由于线程对于内存空间的共享特性 xff0c 在并发执行时却会产生一些意料之外的错误 如下列程序 xff1a include 34 unpthr
  • C++知识点梳理(1)

    C 43 43 程序由一个或者多个被称为函数的模块组成 和函数从main函数 xff08 全部小写 xff09 开始执行 xff0c 所以main函数必不可少 函数头指向函数的返回值 xff08 如果有函数头 xff09 的类型和函数期望通
  • 串口扩展研究

    串口扩展研究 曾几何时 xff0c 鼠标键盘还是PS 2接口 xff0c 在向USB过渡过程中会有一些 USB to PS 2 神器出现 当主设备 xff08 电脑 xff09 和从设备 xff08 鼠标键盘 xff09 都配标准的USB接
  • cmake 工具 三 add_libary, set_target_properties,target_link_libary,link_directories, link_libary

    一起通过一个例子学一下 add libary xff0c set target properties xff0c link libary xff0c target link libary 四个命令 首先创建如下的文件 xff1a 其中 bu
  • ESP32-C3入门教程 蓝牙篇①——基于Blufi 的 WiFi 智能配网

    文章目录 一 前言 二 WiFi配网方式 三 快速运行 四 运行效果 五 程序流程 精简 5 1 WiFi 初始化 5 2 BLE 初始化 5 3 WiFi 回调函数 5 4 BLE 回调函数 5 5 Blufi 回调函数 5 6 流程图
  • FreeRTOS STM32 线程创建失败,单步运行一看才发现是内存不够

    文章目录 一 FreeRTOS线程创建失败二 失败的解决方法三 成功的解决方法 一 FreeRTOS线程创建失败 今天用STM32板子跑一个测试demo xff0c 结果一上车就翻车 一个简简单单的线程起不来 断点进不去 xff0c 单步运
  • HTML5 播放器

    暂存一些HTML5播放器的资料 xff0c 慢慢消化 使用 HTML5 技术播放视频 使用 Clear Key 加密 MP4 视频并播放 Encrypted Media Extensions An introduction to Encry
  • ESP32-C3入门教程 蓝牙篇③——基于微信小程序和Esp Blufi实现 WiFi配网

    基于微信小程序和Esp Blufi实现 WiFi配网 文章目录 一 前言 二 软件框架 三 软件流程 四 API介绍 五 全部源码 一 前言 本文基于VS Code IDE进行编程 编译 下载 运行等操作 基础入门章节请查阅 ESP32 C
  • 路由器重温——接口配置与管理1

    路由器的接口相对于交换机接口来说最大的特点就是接口类型和配置更为复杂 xff0c 一般可以把路由器上的接口分为三大类 xff1a 一类是用于局域网组网的LAN接口 xff0c 另一类是用于广域网接入 互联的WAN接口 xff0c 最后一类可
  • 路由器接口配置与管理——1

    路由器的接口相对于交换机来说最大的特点就是接口类型和配置更为复杂 xff0c 一般吧路由器上的接口分为三大类 xff1a 一类用于局域网的LAN接口 xff0c 一类用于广域网接入 互联的WAN接口 xff0c 最后一类可以应用于LAN组网
  • 使用A*算法寻找路径

    使用A xff0a 算法首先需要将地图分成一个个块 xff0c 每个块称为一个节点 算法主要是维护两张表 openList和closeList openList用来保存待考察的节点 xff0c closeList用来保存不需要考察的节点 算
  • 关于C++中的#define

    include lt iostream gt using namespace std define ADD x y x 43 y 试卷上是减号 xff0c 本人觉得是加号 int main int m 61 3 int n 61 4 m 4
  • c++常用STL库及常用函数

    临近各种算法比赛 xff0c 相信很多人想笔者一样还总是记不住很多函数的用法 xff0c 特此总结一下常用的STL标准库以及标准函数 xff0c 希望能够有所帮助 1 输入输出 输入输出一般用两个标准库 xff1a include lt c
  • cv2.rectangle()函数

    cv2 rectangle 函数 cv2 rectangle img pt1 pt2 color thickness lineType shift 参数表示依次为 xff1a xff08 图片 xff0c 长方形框左上角坐标 长方形框右下角
  • 微信公众号中视频下载的2种方法

    介绍twitter视频下载的2种方法 文前白话1 使用在线网站2 使用使用桌面版软件GTG 文前白话 提示 xff1a 微信公众号中的很多视频可以在YouTube上 还有推特上找到并去下载保存 1 使用在线网站 链接 xff1a 在线网站
  • 深度剖析WinPcap之(四)——WinPcap的体系架构(1)

    本文转自http eslxf blog 51cto com 918801 197405 WinPcap是Win32平台下用于数据包捕获与网络分析的一个架构 它包含一个内核层数据包过滤器 xff0c 一个底层动态链接库 xff08 packe
  • C++ 学习建议

    C 43 43 缺点之一 xff0c 是相对许多语言复杂 xff0c 而且难学难精 C 43 43 的优点就是即能接触底层也可用于上层开发 我是从C进入C 43 43 xff0c 皆是靠阅读自学 在此分享一点学习心得 个人认为 xff0c
  • 【深度学习-图像分类篇】一文全:Pytorch搭建EfficientNe图像分类网络

    深度学习 图像分类篇 Pytorch搭建EfficientNe图像分类网络 1 理论基础1 1 EfficientNet网络简析EfficientNet 网络结构的改进之处EfficientNet不同模型的参数取值论文中不同 Efficie
  • Linux(多用户下)查看cuda、cudnn版本、查看已经安装的cuda版本、切换不同版本cuda之间的切换等相关命令

    Linux中查看已经安装的CUDA多个版本以及当前软链接的版本 cudnn版本 1 查看GPU使用情况 xff1a 2 查看 CUDA 版本 xff1a 3 查看 CUDNN 版本4 不同版本cuda的切换 xff08 需要有足够的权限 x
  • 【深度学习卷积神经网络中涉及的训练参数与超参数概念理解】

    卷积神经网络中涉及的训练参数与超参数概念理解 文前白话 网络超参数1 输入图像大小2 卷积层超参数卷积核尺寸 卷积核数量 卷积的步长 3 池化层超参数池化核尺寸 池化步长 池化方式 网络训练 优化超参数1 Epoch Batch Batch