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

【深度学习】迭代次数 vs bs? 迭代次数 vs epoch

在深度学习的训练过程中,迭代次数(iterations)、批次大小(batch size)和周期(epoch)是三个重要的概念,它们之间有密切的关系。以下是对这些概念及其关系的详细解释:

1. 批次大小(Batch Size)

批次大小是指在一次前向和后向传播中,模型处理的样本数量。批次大小的选择会影响训练的稳定性和速度:

  • 小批次大小:更频繁地更新模型参数,可以更快地找到好的方向,但会导致更高的噪声和不稳定性。
  • 大批次大小:每次更新模型参数时有更准确的梯度估计,但更新频率较低,训练时间可能更长。

2. 迭代次数(Iterations)

迭代次数是指模型在训练过程中更新参数的次数。每次迭代,模型处理一个批次的样本并更新参数。迭代次数的计算公式为:
在这里插入图片描述

[ \text{Iterations per epoch} = \frac{\text{Number of training samples}}{\text{Batch size}} ]

3. 周期(Epoch)

一个周期(epoch)是指模型已经看过所有训练样本一次。换句话说,一个周期意味着模型已经完成了一轮完整的训练数据集的遍历。周期的数量通常用来衡量训练的进展。

关系总结

  1. 迭代次数和批次大小的关系

    • 每次迭代处理一个批次(batch size)的样本。
    • 一个周期内的迭代次数等于训练集的样本数量除以批次大小。
  2. 迭代次数和周期的关系

    • 一个周期内的迭代次数为:
      在这里插入图片描述
      [ \text{Iterations per epoch} = \frac{\text{Number of training samples}}{\text{Batch size}} ]

    • 总的迭代次数(Total iterations)等于每个周期的迭代次数乘以周期数:

    • 在这里插入图片描述
      [ \text{Total iterations} = \text{Iterations per epoch} \times \text{Number of epochs} ]

示例

假设有一个训练集包含1000个样本,批次大小为50,训练10个周期:

  1. 每个周期的迭代次数
    [ \text{Iterations per epoch} = \frac{1000}{50} = 20 ]

  2. 总的迭代次数
    [ \text{Total iterations} = 20 \times 10 = 200 ]

实践中的选择

  • 批次大小:选择合适的批次大小通常需要在稳定性和计算效率之间权衡。较小的批次大小可能导致更高的噪声,但更频繁的参数更新。较大的批次大小则提供更稳定的梯度估计,但需要更多的内存和较长的计算时间。
  • 周期数:通常通过观察训练和验证损失或准确率来决定训练的周期数。过多的周期可能导致过拟合,而过少的周期可能导致欠拟合。

代码示例

以下是一个简单的PyTorch代码示例,展示了迭代次数、批次大小和周期数的关系:

import torch
from torch.utils.data import DataLoader, TensorDataset# 生成一些示例数据
num_samples = 1000
inputs = torch.randn(num_samples, 10)
targets = torch.randn(num_samples, 1)# 创建数据集和数据加载器
dataset = TensorDataset(inputs, targets)
batch_size = 50
dataloader = DataLoader(dataset, batch_size=batch_size, shuffle=True)# 模型、损失函数和优化器
model = torch.nn.Linear(10, 1)
loss_fn = torch.nn.MSELoss()
optimizer = torch.optim.SGD(model.parameters(), lr=0.01)# 训练
num_epochs = 10
for epoch in range(num_epochs):for batch_inputs, batch_targets in dataloader:# 前向传播outputs = model(batch_inputs)loss = loss_fn(outputs, batch_targets)# 后向传播和优化optimizer.zero_grad()loss.backward()optimizer.step()print(f'Epoch [{epoch+1}/{num_epochs}], Loss: {loss.item():.4f}')

在这个示例中,我们有1000个样本,批次大小为50,每个周期有20次迭代,总共训练10个周期。因此,总的迭代次数为200次。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Vue.js 样式绑定
  • Systemc example based on VCS
  • 专家系统的核心要点解析|专家系统|人工智能|知识工程
  • 【中仕公考是骗子吗】公务员联考是什么意思?
  • 线性代数基础
  • 基于ssm+vue+uniapp的图书管理系统小程序
  • 关于武汉芯景科技有限公司的实时时钟芯片XJ8340开发指南(兼容DS1340)
  • 【微服务】springboot整合对象映射工具MapStruct使用详解
  • 力扣刷题--137. 只出现一次的数字 II【中等】
  • FATE Board 执行流程探索
  • SpringBoot依赖之Spring Boot DevTools热部署开发增效工具
  • 编写测试用例的常用方法总结
  • Web安全:SQL注入实战测试.(扫描 + 测试)
  • 【MySQL 15】使用 C/C++ 连接数据库
  • java实现ocr功能(Tesseract OCR)
  • IE9 : DOM Exception: INVALID_CHARACTER_ERR (5)
  • echarts花样作死的坑
  • Github访问慢解决办法
  • JavaScript服务器推送技术之 WebSocket
  • leetcode378. Kth Smallest Element in a Sorted Matrix
  • MySQL主从复制读写分离及奇怪的问题
  • Python学习之路13-记分
  • RxJS: 简单入门
  • SegmentFault 2015 Top Rank
  • socket.io+express实现聊天室的思考(三)
  • Spring Cloud中负载均衡器概览
  • springboot_database项目介绍
  • SpringBoot几种定时任务的实现方式
  • vue-router 实现分析
  • vue--为什么data属性必须是一个函数
  • Vue小说阅读器(仿追书神器)
  • 给第三方使用接口的 URL 签名实现
  • 后端_MYSQL
  • 回流、重绘及其优化
  • 看完九篇字体系列的文章,你还觉得我是在说字体?
  • 使用 QuickBI 搭建酷炫可视化分析
  •  一套莫尔斯电报听写、翻译系统
  • 3月7日云栖精选夜读 | RSA 2019安全大会:企业资产管理成行业新风向标,云上安全占绝对优势 ...
  • 7行Python代码的人脸识别
  • PostgreSQL之连接数修改
  • Redis4.x新特性 -- 萌萌的MEMORY DOCTOR
  • 基于django的视频点播网站开发-step3-注册登录功能 ...
  • ​水经微图Web1.5.0版即将上线
  • # 数仓建模:如何构建主题宽表模型?
  • ###C语言程序设计-----C语言学习(3)#
  • $$$$GB2312-80区位编码表$$$$
  • (cljs/run-at (JSVM. :browser) 搭建刚好可用的开发环境!)
  • (el-Transfer)操作(不使用 ts):Element-plus 中 Select 组件动态设置 options 值需求的解决过程
  • (Redis使用系列) Springboot 使用redis的List数据结构实现简单的排队功能场景 九
  • (创新)基于VMD-CNN-BiLSTM的电力负荷预测—代码+数据
  • (简单) HDU 2612 Find a way,BFS。
  • (剑指Offer)面试题34:丑数
  • (十) 初识 Docker file
  • ****** 二十三 ******、软设笔记【数据库】-数据操作-常用关系操作、关系运算
  • **PyTorch月学习计划 - 第一周;第6-7天: 自动梯度(Autograd)**