神经网络参数-----batch_size

什么是BatchSize

  • Batch一般被翻译为批量,设置batch_size的目的让模型在训练过程中每次选择批量的数据来进行处理。Batch Size的直观理解就是一次训练所选取的样本数
  • Batch Size的大小影响模型的优化程度和速度。同时其直接影响到GPU内存的使用情况,假如你GPU内存不大,该数值最好设置小一点

在神经网络的训练过程中,一个非常直观的需要调整的超参数就是batch size。我们需要决定在一次训练中,要选取多少样本喂给神经网络,这个要选择的样本个数,就是batch size。
batch size的可取值范围为1到全体样本数

  • 传统的梯度下降法(Gradient Descent)就是采用了全部样本来进行训练和梯度更新,
  • 它的变体随机梯度下降法(stochastic gradient descent),则设定batch size为1,即每次只将一个样本喂给神经网络,
  • 在mini-batch梯度下降法中,则采用了一个折中的方法,每次选择一部分数据用于训练

batch size对网络的影响

  • 在没有使用Batch Size之前,这意味着网络在训练时,是一次把所有的数据(整个数据库)输入网络中,然后计算它们的梯度进行反向传播,由于在计算梯度时使用了整个数据库,所以计算得到的梯度方向更为准确。但在这情况下,计算得到不同梯度值差别巨大,难以使用一个全局的学习率,所以这时一般使用Rprop这种基于梯度符号的训练算法,单独进行梯度更新。
  • 在小样本数的数据库中,不使用Batch Size是可行的,而且效果也很好。但是一旦是大型的数据库,一次性把所有数据输进网络,肯定会引起内存的爆炸。所以就提出Batch Size的概念。

如何设置Batch_Size 的值?

更大的batch size会得到更精确的梯度估计值,但其估计梯度的回报是低于线性的。如果训练集较小,可以直接使用梯度下降法,batch size等于样本集大小。

设置BatchSize要注意一下几点:
  1. batch数太小,而类别又比较多的时候,真的可能会导致loss函数震荡而不收敛,尤其是在你的网络比较复杂的时候。
  2. 随着batchsize增大,处理相同的数据量的速度越快。
  3. 随着batchsize增大,达到相同精度所需要的epoch数量越来越多
  4. 由于上述两种因素的矛盾, Batch_Size 增大到某个时候,达到时间上的最优。
  5. 由于最终收敛精度会陷入不同的局部极值,因此 Batch_Size 增大到某些时候,达到最终收敛精度上的最优。
  6. 过大的batchsize的结果是网络很容易收敛到一些不好的局部最优点。同样太小的batch也存在一些问题,比如训练速度很慢,训练不容易收敛等。
  7. 具体的batch size的选取和训练集的样本数目相关。
  8. GPU对2的幂次的batch可以发挥更佳的性能,因此设置成16、32、64、128…时往往要比设置为整10、整100的倍数时表现更优,Deep Learning 书中提到,在某些硬件上使用特定大小的数组时,运行时间会更少。尤其是在使用GPU时,通常使用2的幂数作为batch size可以获得更少的运行时间。

在设置BatchSize的时候,首先选择大点的BatchSize把GPU占满,观察Loss收敛的情况,如果不收敛,或者收敛效果不好则降低BatchSize,一般常用16,32,64等。

batchsize过大优点:
  • (1)提高了内存利用率,大矩阵乘法并行计算效率提高。
  • (2)计算的梯度方向比较准,引起的训练的震荡比较小。
  • (3)跑完一次epoch所需要的迭代次数变小,相同数据量的数据处理速度加快。
batchsize过大缺点:
  • 容易内容溢出,想要达到相同精度,epoch会越来越大,容易陷入局部最优,泛化性能差。

batchsize设置:通常10到100,一般设置为2的n次方。原因:计算机的gpu和cpu的memory都是2进制方式存储的,设置2的n次方可以加快计算速度。

batchsize过小:每次计算的梯度不稳定,引起训练的震荡比较大,很难收敛。

在合理范围内,增大Batch_Size有何好处?
  • 内存利用率提高了,大矩阵乘法的并行化效率提高。
  • 跑完一次 epoch(全数据集)所需的迭代次数减少,对于相同数据量的处理速度进一步加快。
  • 在一定范围内,一般来说 Batch_Size 越大,其确定的下降方向越准,引起训练震荡越小。
盲目增大 Batch_Size 有何坏处?
  • 内存利用率提高了,但是内存容量可能撑不住了。
  • 跑完一次 epoch(全数据集)所需的迭代次数减少,要想达到相同的精度,其所花费的时间大大增加了,从而对参数的修正也就显得更加缓慢。
  • Batch_Size 增大到一定程度,其确定的下降方向已经基本不再变化。
调节 Batch_Size 对训练效果影响到底如何?
  • Batch_Size 太小,模型表现效果极其糟糕(error飙升)。
  • 随着 Batch_Size 增大,处理相同数据量的速度越快。
  • 随着 Batch_Size 增大,达到相同精度所需要的 epoch 数量越来越多。
  • 由于上述两种因素的矛盾, Batch_Size 增大到某个时候,达到时间上的最优。
  • 由于最终收敛精度会陷入不同的局部极值,因此 Batch_Size 增大到某些时候,达到最终收敛精度上的最优
如何选择合适的batch_size
  • 考虑硬件资源:batch_size的大小受到硬件资源的限制。如果GPU或CPU的内存不足,则需要减小batch_size。
  • 权衡训练速度和精度:较大的batch_size可以加快训练速度,但可能会导致模型精度下降;而较小的batch_size可以提高模型精度,但会减慢训练速度。因此,需要在训练速度和精度之间找到一个平衡点。
  • 尝试不同的值:在实际应用中,可以尝试不同的batch_size值,并观察模型在验证集上的性能表现。通常,可以使用一些常用的batch_size值(如32、64、128、256等)作为起点。

1.当数据量足够大的时候可以适当的减小batch_size,由于数据量太大,内存不够。但盲目减少会导致无法收敛,batch_size=1时为在线学习,也是标准的SGD,这样学习。如果数据量不大,noise数据存在时,模型容易被noise带偏,如果数据量足够大,noise的影响会被“冲淡”,对模型几乎不影响。

2.batch的选择,首先决定的是下降方向,如果数据集比较小,则完全可以采用全数据集的形式。这样做的好处有两点。

  1. 全数据集的方向能够更好的代表样本总体,确定其极值所在。
  2. 由于不同权重的梯度值差别巨大,因此选取一个全局的学习率很困难。

深度学习中经常看到epoch、 iteration和batchsize这三个的区别:

  1. batchsize:批大小。在深度学习中,一般采用SGD训练,即每次训练在训练集中取batchsize个样本训练;
  2. iteration:1个iteration等于使用batchsize个样本训练一次;
  3. epoch:1个epoch等于使用训练集中的全部样本训练一次;

举个例子,训练集有1000个样本,batchsize=10,那么训练完整个样本集需要:100次iteration,1次epoch。

参考:

【深度学习】一文向您详细介绍深度学习中的 batch_size_深度学习中batch-CSDN博客

深度学习基础入门篇[六]:模型调优,学习率设置(Warm Up、loss自适应衰减等),batch size调优技巧,基于方差放缩初始化方法。-腾讯云开发者社区-腾讯云 (tencent.com)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/34219.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java中的IO操作技巧与性能优化

Java中的IO操作技巧与性能优化 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!今天,我们将探讨Java中的IO操作技巧与性能优化。IO操作是Java开发中常…

GUVCL-S10GD光电二极管紫外线传感器紫外灯韩国GenUV原厂代理商

深圳市宏南科技有限公司是韩国GenUV公司的原厂代理商,所售紫外线传感器均来自于原始生产厂商直接供货,非第三方转售。 GUVCL-S10GD GUVC-T10GD 原装韩国GENUV光学传感器 - 光电二极管 UVCLED UV-C 传感器 GUVC-S10GD 采用基于氮化镓的材料 肖特基型 光…

索引器知识点

索引器基本概念 让对象可以像数组一样通过索引访问其中元素,使程序看起来更直观,更容易编写。 索引器语法 访问修饰符 返回值 this[参数类型 参数名, 参数类型 参数名.....] {内部的写法和规则和索引器相同get{}set{} } 索引器的重载及逻辑 class P…

【自然语言处理】python之人工智能应用篇——文本生成技术

文本生成是指使用自然语言处理技术,基于给定的上下文或主题自动生成人类可读的文本。这种技术可以应用于各种领域,如自动写作、聊天机器人、新闻生成、广告文案创作等。 一、文本生成技术的核心要素包括: 1. 预训练模型 概述:预…

Java | Leetcode Java题解之第188题买卖股票的最佳时机IV

题目: 题解: class Solution {public int maxProfit(int k, int[] prices) {if (prices.length 0) {return 0;}int n prices.length;k Math.min(k, n / 2);int[] buy new int[k 1];int[] sell new int[k 1];buy[0] -prices[0];sell[0] 0;for (…

精益管理咨询公司在与企业沟通时,应该如何展示自己的专业性?

在竞争激烈的商业环境中,精益管理咨询公司扮演着至关重要的角色。它们不仅为企业提供策略性的指导,还帮助企业实现资源的优化配置,从而达到提高效率、降低成本的目的。那么,精益管理咨询公司在与企业沟通时,应该如何展…

MinIO在Linux环境中的使用

MinIO 是一个高性能的对象存储服务,兼容 Amazon S3 API。它设计用于大规模数据存储,可以很好地处理大数据集和高并发请求。如果你想在 Linux 系统上安装 MinIO,并开放必要的端口以便外部访问。 Vmware下载安装和linux安装这里就不在赘述了&a…

复习2-20240624

vscode 使用 Javabean (封装性) public class Demo01 {/*1.原则 : 字母 数字 $ _ 中文 除了 这五个 其它都不可以2. 细则 : 数字 不能 开头%hbviunh &hfiureh )nhjrn 7487j -ni hbiu tgf hi…

iOS抓包指南 正则过滤爬取

解读iOS抓包 抓包 (packet capture)就是将网络传输发送与接收的数据包进行截获、重发、编辑、转存等操作,也用来检查网络安全。抓包也经常被用来进行数据截取等。 什么是正则表达式? 正则表达式(regular expression)是用来描述…

网络安全----安全设备(二)防火墙

防火墙 一、防火墙是什么?二、防火墙的发展史(1)第四代和第五代防火墙的区别 三、防火墙的功能 一、防火墙是什么? 防火墙(Firewall)是一个软件、硬件设备或软硬件结合的安全管理系统,构建于网…

利用Java easyExcel库实现高效Excel数据处理

在Java应用程序中,处理Excel文件是一项常见任务,尤其是在需要读取、写入或分析大量数据时。easyExcel是一个基于Java的高性能Excel处理库,它提供了简洁的API和优化的性能,以简化Excel文件的处理。本文将指导您如何使用easyExcel库…

Python字典深度探索:25个高级操作技巧

今天,我们踏入字典的神秘森林,挖掘那些不为人知的宝藏。字典,Python中的超级英雄,存储数据的魔法帽,今天我们将解锁它的20个高级特技,让你的代码飞起来! 1. 初始化大法:花式建字典 …

系统编程:线程相关

线程 相关函数及过程: 创建线程号; pthread_t tid; 创建线程:pthread_create(&tid, NULL, task, argv[1]); 定义线程执行函数:void *task(void *arg){ 线程退出:pthread_exit(ret);//线程结束后退出 } 等待所有线程结束:pthread_join(tid, (void **)&ret); 编译时增加…

计算机网络面试HTTP篇二

HTTP/1.1 如何优化? 问你一句:「你知道 HTTP/1.1 该如何优化吗?」 我们可以从下面这三种优化思路来优化 HTTP/1.1 协议: 尽量避免发送 HTTP 请求;在需要发送 HTTP 请求时,考虑如何减少请求次数&#xff…

常用网站收集

微信公众号 https://mp.weixin.qq.com/ 新浪邮箱 https://mail.sina.com.cn/?frommail 博客 https://blog.csdn.net/ 印象笔记 https://app.yinxiang.com/ b站 https://member.bilibili.com/ 微博 https://weibo.com/ QQ音乐 https://y.qq.com/ 网易云音乐 htt…

Springboot启动mongoDB报错后禁用mongoDB自动配置

一、背景 最近在项目当中使用到MongoDB的驱动及相关依赖,发现在启动的时候有MongoDB启动报错信息,目前也不直接使用MongoDB,所以把自动配置这一块在启动的时候去除掉。 二、操作方式 Application启动类,修改启动SpringBootAppli…

400技术汇 教你如何成为抓包高手!

Wireshark是目前使用最广泛的网络抓包分析工具,也是每一位网络攻城狮电脑里必装神器。当网络里发现恶意攻击、某人下载流量过大、设备互联丢包、协议交互失败等等情况时,通过Wireshark抓包定位问题根源,是最直接有效的手段。 然而如此强大的…

【C++】future/promise

future/promise 1 来源 需要从线程中返回异步任务结果情形时,c11之前: 使用指针在线程间共享数据。 传递一个指针到新的线程中,该线程在其中设置数据,直到主线程继续等待使用条件变量。当新线程设置数据并通知条件变量时&#x…

守护清远采矿安全:可燃气体报警器检定工作的必要性与实施

清远市地处广东省北部,矿产资源丰富,包括金属矿产、非金属矿产等多种类型。采矿行业作为清远的重要产业之一,对当地经济发展起到了积极的推动作用。 然而,随着采矿业的快速发展,安全问题也逐渐凸显出来,尤…

05 Pytorch 数据读取 + 二分类模型

05 Pytorch 数据读取 二分类模型05 Pytorch 数据读取 二分类模型05 Pytorch 数据读取 二分类模型 01 数据读取 DataLoader(set作为参数) 02 Dataset 从哪读,怎么读? 功能:数据从哪里读取? 如何读取…