当前位置: 首页 > news >正文

第十六章 解读深度学习中Batch Size、Iterations和Epochs(工具)

训练网络之前有很多参数要设置,不了解各个参数的含义就没法合理地设置参数值,训练效果也会因此大受影响。本篇博客记录一下网络训练里的Batch Size、Iterations和Epochs怎么理解。

一、引言

首先要了解一下为什么会出现Batch Size这个概念。深度学习算法是迭代的,也就是会多次使用算法获取结果,以得到最优化的结果。每次迭代更新网络参数有两种方式,也是两种极端:

第一种是Batch Gradient Descent,批梯度下降,即把所有数据一次性输入进网络,把数据集里的所有样本都看一遍,然后计算一次损失函数并更新参数。这种方式计算量开销很大,速度也很慢,不支持在线学习。

第二种是Stochastic Gradient Descent,随机梯度下降,即把每次只把一个数据输入进网络,每看一个数据就算一下损失函数并更新参数。这种方式虽然速度比较快,但是收敛性能不好,可能会在最优点附近震荡,两次参数的更新也有可能互相抵消掉。

可见,这两种方式都有问题,所以现在一般都是采用两种方式的折衷,Mini-Batch Gradient Decent,小批梯度下降。就是把数据进行切片,划分为若干个批,按批来更新参数。这样,一个批中的一组数据共同决定了本次梯度的方向,下降起来就不容易跑偏,减少了随机性。并且由于批的样本数与整个数据集相比小了很多,计算量也不是很大。

二、Batch Size

所谓的batch_size,就是每次训练所选取的样本数,通俗点讲就是一个 batch中的样本总数,一次喂进网络的样本数。batch_size的选择会影响梯度下降的方向。

在合理范围内增大batch_size有以下几个好处:

  1. 内存利用率高,大矩阵乘法的并行化效率提高;
  2. 跑完全部数据所需的迭代次数少,对于相同数据量的处理速度可以进一步加快;
  3. 在一定范围内,一般来说batch_size越大,其确定的下降方向越准,引起的训练震荡越小。

但也不能盲目增大,否则会有以下几个坏处:

  1. 内存容量可能撑不住,报错RuntimeError:CUDA out of memory;
  2. 跑完全部数据集所需的迭代次数减少,要想达到相同的精度,其所花费的时间大大增加了,从而对参数的修正也就显得更加缓慢;
  3. 当batch_size增大到一定程度时,其确定的下降方向已经基本不再变化了。

三、Iterations

所谓的iterations,就是训练完全部数据需要迭代的次数,通俗点讲一个iteration就是使用batch_size个样本把网络训练一次,iterations就是整个数据集被划分成的批次数目,数值上等于data_size/batch_size。

把全部的样本数据,按照batch_size进行切片,划分成iterations块。每个iteration结束后都会更新一次网络结构的参数,每一次迭代得到的结果都会被作为下一次迭代的初始值。

一个iteration=一个batch_size的数据进行一次forward propagation和一次backward propagation。

四、Epochs

所谓的epochs,就是前向传播和反向传播过程中所有批次的训练迭代次数,一个epoch就是整个数据集的一次前向传播和反向传播,通俗点讲,epochs指的就是训练过程中全部数据将被送入网络训练多少次。

为什么要使用多个epoch进行训练呢?因为在神经网络中传递完整的数据集一次是不够的,我们需要将完整的数据集在同样的神经网络中传递多次。我们使用的是有限的数据集,仅仅更新权重一次或者说使用一个epoch是不够的。

如果epochs太小,网络有可能发生欠拟合;如果epochs太大,则有可能发生过拟合。具体怎么选择要根据实验结果去判断和选择,对于不同数据集选取的epochs是不一样的。

五、举个例子

假设有1024个训练样本,batch_size=8,epochs=10,那么:每个epoch会训练1024/8=128个iteration,全部1024个训练样本会被这样训练10次,所以一共会有1280个iteration,发生1280次前向传播和反向传播。注意,由于Batch Normalization层的存在,batch_size一般设置为2的倍数,并且不能为1

总结一下:

  1. Batch使用训练集中的一小部分样本对模型权重进行一次反向传播的参数更新,这一小部分样本被称为“一批数据”;
  2. Iteration是使用一个Batch数据对模型进行一次参数更新的过程,被称为“一次训练”;
  3. Epoch使用训练集的全部数据对模型进行一次完整训练,被称为“一代训练”。

相关文章:

第十六章 解读深度学习中Batch Size、Iterations和Epochs(工具)

训练网络之前有很多参数要设置,不了解各个参数的含义就没法合理地设置参数值,训练效果也会因此大受影响。本篇博客记录一下网络训练里的Batch Size、Iterations和Epochs怎么理解。 一、引言 首先要了解一下为什么会出现Batch Size这个概念。深度学习算…...

基于UI交互意图理解的异常检测方法

美团到店平台技术部/质量工程部与复旦大学周扬帆教授团队开展了科研合作,基于业务实际场景,自主研发了多模态UI交互意图识别模型以及配套的UI交互框架。 本文从大前端质量保障领域的痛点出发,介绍了UI交互意图识别的方法设计与实现。基于UI交…...

ArgoWorkflow教程(一)---DevOps 另一选择?云原生 CICD: ArgoWorkflow 初体验

来自:探索云原生 https://www.lixueduan.com 原文:https://www.lixueduan.com/posts/devops/argo-workflow/01-deploy-argo-workflows/ 本文主要记录了如何在 k8s 上快速部署云原生的工作流引擎 ArgoWorkflow。 ArgoWorkflow 是什么 Argo Workflows 是…...

数据结构与算法编程题24

中序遍历非递归算法 #define _CRT_SECURE_NO_WARNINGS#include <iostream> using namespace std;typedef char ElemType; #define ERROR 0 #define OK 1 #define Maxsize 100 #define STR_SIZE 1024typedef struct BiTNode {ElemType data;BiTNode* lchild, * rchild; }B…...

springsecurity6配置四

一、springsecurity自定义过滤url配置 package com.school.information.config;import lombok.Data; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.stereotype.Component;import java.util.List;/*** 需要放行的…...

OpenCV简介及安装

前言 因为最近想做图像处理、人脸检测/识别之类的相关开发&#xff0c;所以就开始补OpenCV的相关知识&#xff0c;便开个专栏用于记录学习历程和在学习过程中遇到的一些值得注意的重点和坑。 学习过程基本上也是面向官方文档和Google。 简介 OpenCV(开源的计算机视觉库)是基于…...

Unity调用dll踩坑记

请用写一段代码&#xff0c;让unity无声无息的崩溃。 你说这怕是有点难哦&#xff0c;谁会这么不幸呢&#xff1f;不幸的是&#xff0c;我幸运的成为了那个不幸的人。 unity里面调用dll的方式是使用 DllImport &#xff0c;比如有一个 Hello.dll&#xff0c;里面有一个 char* …...

Oracle 数据库基线安全加固操作

目录 账号管理、认证授权 ELK-Oracle-01-01-01 ELK-Oracle-01-01-02 ​​​​​​​ELK-Oracle-01-01-03 ​​​​​​​ELK-Oracle-01-01-04 ​​​​​​​ELK-Oracle-01-01-05 ​​​​​​​ELK-Oracle-01-01-06 ​​​​​​​ ELK-Oracle-01-01-07 ​​​​​​​ …...

安装最新版WebStorm来开发JavaScript应用程序

安装最新版WebStorm来开发JavaScript应用程序 Install the Latest Version of JetBrains WebStorm to Develop JavaScript Applications By JacksonML 2023-11-25 1. 系统要求 WebStorm是个跨平台集成开发环境&#xff08;IDE&#xff09;。按照JetBrains官网对WebStorm软件…...

python opencv 放射变换和图像缩放-实现图像平移旋转缩放

python opencv 放射变换和图像缩放-实现图像平移旋转缩放 我们实现这次实验主要用到cv2.resize和cv2.warpAffine cv2.warpAffine主要是传入一个图像矩阵&#xff0c;一个M矩阵&#xff0c;输出一个dst结果矩阵&#xff0c;计算公式如下&#xff1a; cv2.resize则主要使用fx&…...

安装Anaconda、PyTorch(GPU版)库与PyCharm】

【Python深度学习&#xff1a;安装Anaconda、PyTorch&#xff08;GPU版&#xff09;库与PyCharm】https://www.bilibili.com/video/BV1cD4y1H7Tk?vd_source0aeb782d0b9c2e6b0e0cdea3e2121ebadownload.pytorch.org/whl/torchaudio/更改Jupyter Notebook的默认路径&#xff0c;亲…...

关于pytorch以及相关包的安装教程

一.查看自己电脑的配置 首先查看自己电脑的cuda的版本&#xff0c;WinR,敲入cmd打开终端 输入nvidia-smi&#xff0c;查看自己电脑的显卡等配置 这里要说明一下关于这个CUDA,它具有向后兼容性&#xff0c;这意味着支持较低版本的 CUDA 的应用程序通常也可以在较高版本的 CUD…...

AnalyticDB for PostgreSQL 实时数据仓库上手指南

AnalyticDB for PostgreSQL 实时数据仓库上手指南 2019-04-016601 版权 本文涉及的产品 云原生数据仓库 ADB PostgreSQL&#xff0c;4核16G 50GB 1个月 推荐场景&#xff1a; 构建的企业专属Chatbot 立即试用 简介&#xff1a; AnalyticDB for PostgreSQL 提供企业级数…...

【数据结构】堆(C语言)

今天我们来学习堆&#xff0c;它也是二叉树的一种&#xff08;我滴神树&#xff01;&#xff09; 目录 堆的介绍&#xff1a;堆的代码实现&#xff1a;堆的结构体创建&#xff1a;堆的初始化&#xff1a;堆的销毁&#xff1a;堆的push&#xff1a;堆的pop&#xff1a;判空 &am…...

使用 Raspberry Pi、Golang 和 HERE XYZ 制作实时地图

到目前为止&#xff0c;您可能已经看过我的一些与 Raspberry Pi 和位置数据相关的教程。我是这些小型物联网 (IoT) 设备的忠实粉丝&#xff0c;并编写了有关使用 Golang 进行 WLAN 定位 和 使用 Node.js 进行 GPS 定位的教程。 我想继续沿着 Golang 路线&#xff0c;做一个关于…...

贪吃蛇(c实现)(真的超级超级简单)

1.代码请看贪吃蛇c实现 王赫辰/c语言 - 码云 - 开源中国 (gitee.com) 2.本项目宗旨&#xff1a; 1.不引入复杂的库函数&#xff08;其他博主的全是陌生库函数看不懂&#xff1f;看我就对了&#xff01;◕‿◕&#xff09; 2.不使用c语法 &#xff08;都说了c实现&#xff0c;…...

linux 内存回收mglru算法代码注释2

mglru与原lru算法的兼容 旧的lru算法有active与inactive两代lru&#xff0c;可参考linux 内存回收代码注释&#xff08;未实现多代lru版本&#xff09;-CSDN博客 新的算法在引入4代lru的同时&#xff0c;还引入了tier的概念。 新旧算法的切换的实现在lru_gen_change_state&a…...

Exchange意外登录日志

最近在审计Exchange邮件系统的时候&#xff0c;发现大量用户半夜登录的日志。而且都是成功的&#xff0c;几乎没有失败的情况。其中Logon Type 8表示用户从网络登录。 Logon type 8: NetworkCleartext. A user logged on to this computer from the network. The user’s pas…...

NX二次开发UF_CURVE_ask_curve_turn_angle 函数介绍

文章作者&#xff1a;里海 来源网站&#xff1a;https://blog.csdn.net/WangPaiFeiXingYuan UF_CURVE_ask_curve_turn_angle Defined in: uf_curve.h int UF_CURVE_ask_curve_turn_angle(tag_t curve, double orientation [ 3 ] , double * angle ) overview 概述 Returns …...

UE 进阶篇一:动画系统

导语: 下面的动画部分功能比较全,可以参考这种实现方式,根据自己项目的颗粒度选择部分功能参考,我们商业项目动画部分也是这么实现的。 最后实现的效果如下: 最终效果 目录: ------------------------------------------- 文末有视频教程/工程地址链接 -------------…...

魔兽争霸III终极兼容性修复指南:让经典游戏在Windows 11上焕发新生

魔兽争霸III终极兼容性修复指南&#xff1a;让经典游戏在Windows 11上焕发新生 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 还在为《魔兽争霸III》…...

VirtIO PCI 与 PCIe

VirtIO PCI 是基于 PCI/PCIe 总线的半虚拟化设备接口标准&#xff1b;PCIe 是物理总线协议&#xff0c;VirtIO 可同时跑在传统 PCI 与 PCIe 上&#xff0c;现代 VirtIO 1.0 主要以 PCIe 为载体&#xff08;Modern 模式&#xff09;。VirtIO PCI&#xff1a;VirtIO 半虚拟化协议…...

工业现场设备的监控系统(有完整资料)

资料查找方式&#xff1a;特纳斯电子&#xff08;电子校园网&#xff09;&#xff1a;搜索下面编号即可编号&#xff1a;T1532310M设计简介&#xff1a;本设计是工业现场设备的监控系统&#xff0c;主要实现以下功能&#xff1a;通过温湿度传感器检测温湿度&#xff0c;湿度过高…...

ArcGIS线要素长度计算避坑指南:为什么你的结果总是不对?(附坐标系解决方案)

ArcGIS线要素长度计算避坑指南&#xff1a;为什么你的结果总是不对&#xff1f; 当你第一次在ArcGIS中计算线要素长度时&#xff0c;可能会惊讶地发现结果与预期相差甚远。这不是软件出了问题&#xff0c;而是坐标系在"作怪"。本文将带你深入理解这个GIS领域最常见的…...

WebGL开发数字孪生系统的流程

开发一个基于 WebGL 的数字孪生系统&#xff08;Digital Twin&#xff09;&#xff0c;不仅涉及图形渲染&#xff0c;更核心在于物理世界与数字空间的实时映射。以下是标准的开发全流程分解&#xff1a;1. 资产构建与标准化数字孪生的基础是高度还原的 3D 模型。建模与减面&…...

用PointNet搞定ShapeNet零件分割:手把手教你训练自己的3D模型分割器

用PointNet实现ShapeNet零件分割&#xff1a;从数据准备到可视化分析的完整实战指南 在3D视觉领域&#xff0c;点云分割技术正逐渐成为工业检测、自动驾驶和机器人抓取等场景的核心支撑。不同于传统的2D图像分割&#xff0c;点云数据直接保留了物体的三维几何信息&#xff0c;使…...

别再手动示教了!用RobotStudio的Offs函数搞定ABB机器人复杂码垛(附完整RAPID代码)

告别示教噩梦&#xff1a;用RobotStudio的Offs函数实现ABB机器人智能码垛 在工业自动化领域&#xff0c;码垛作业是最常见也最耗时的任务之一。传统的手动示教方式需要工程师逐个点位进行示教&#xff0c;不仅效率低下&#xff0c;而且容易出错。想象一下&#xff0c;面对一个3…...

从“对话工具”到“自主智能体”:彻底搞懂AI Agent的核心定义、本质边界与落地实践

你是不是也经常听到「AI Agent」这个词&#xff0c;却始终分不清它和普通聊天机器人、加了插件的大模型到底有什么本质区别&#xff1f; 是不是见过太多号称「Agent」的产品&#xff0c;用起来却还是和ChatGPT没两样&#xff0c;只是多了几个功能入口&#xff1f; 这篇文章&…...

指标管理系统怎么做?一文讲清指标管理系统建设方案

有一次做复盘会&#xff0c;几个部门一起对数据。运营说转化率是20%&#xff0c;市场说是15%&#xff0c;财务那边又给了一个完全不同的数字。现场没有人敢拍板&#xff0c;因为每个人的数据看起来都对。那一刻其实很典型&#xff0c;不是有人算错了&#xff0c;而是根本没有一…...

Linux系统环境一键检测脚本:快速查看所有已安装的开发工具与版本

作者&#xff1a;尘一不染 | 2026-04-17 ———————————————— 版权声明&#xff1a;本文为CSDN博主「尘一不染」的原创文章&#xff0c;遵循CC 4.0 BY-SA版权协议&#xff0c;转载请附上原文出处链接及本声明。 在日常的Linux开发或运维工作中&#xff0c;我们…...