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

深度学习中的yield

以下为例:

def data_iter(batch_size, features, labels):num_examples = len(features)indices = list(range(num_examples))# 这些样本是随机读取的,没有特定的顺序random.shuffle(indices)for i in range(0, num_examples, batch_size):batch_indices = torch.tensor(indices[i: min(i + batch_size, num_examples)])yield features[batch_indices], labels[batch_indices]

 

在 Python 中,yield是一个关键字,使用yield的函数是一个生成器函数

生成器函数的基本概念

  • 普通函数在执行时,遇到return语句就会终止函数执行,并返回相应的值。而生成器函数在执行过程中,遇到yield语句时,会暂停函数的执行,保存当前的执行状态(包括局部变量的值等),并返回yield后面表达式的值(如果有的话)。当下一次通过某种方式(比如在循环中迭代这个生成器)来请求生成器继续执行时,函数会从上次暂停的地方(也就是yield语句处)继续往下执行,直到再次遇到yield语句或者函数执行完毕(如果没有更多的yield语句了)。

在 data_iter 函数中的具体作用

  • 在 data_iter 函数里,目的是将给定的数据集(featureslabels)按照指定的 batch_size 划分成一个个小批次(batch)数据来方便后续的批量训练等操作。
  • 当循环执行到 yield features[batch_indices], labels[batch_indices] 这一行时:
    • 首先,它会基于当前批次对应的索引(batch_indices)从总的特征数据 features 和标签数据 labels 中取出相应的批次数据。
    • 然后,将取出的该批次的特征数据和标签数据作为一个元组返回,这个返回值可以被外部代码获取到(比如在循环中迭代这个生成器来依次获取每个批次的数据)。
    • 执行完这次 yield 后,函数就暂停在这里了,等到下一次继续迭代这个生成器(比如下一次循环到这里来获取下一个批次的数据),函数会接着从这个 yield 语句之后继续执行,重新去处理下一组索引范围,取出下一个批次的数据并返回,如此反复,直到整个数据集的样本都被划分成批次并返回完。

总的来说,yield让 data_iter 函数变成了一个生成器,能方便地按批次逐个生成数据,避免一次性把所有数据都处理好放入内存,节省内存空间并且符合按批次处理数据的常见深度学习训练流程需求。

http://www.lryc.cn/news/502072.html

相关文章:

  • 数据库数据恢复—ORACLE常见故障有哪些?如何恢复数据?
  • 使用JavaScrip和HTML搭建一个简单的博客网站系统
  • 算法-字符串-76.最小覆盖子串
  • Python爬虫之Selenium的应用
  • 粉丝生产力与开源 AI 智能名片 2+1 链动模式商城小程序的融合创新与价值拓展
  • 红黑树(Red-Black Tree)
  • Cocos 资源加载(以Json为例)
  • 解决 IntelliJ IDEA 启动错误:插件冲突处理
  • SQL——DQL分组聚合
  • Ripro V5日主题 v8.3 开心授权版 wordpress主题虚拟资源下载站首选主题模板
  • 分布式搜索引擎之elasticsearch基本使用2
  • java学习-第十五章-IO流(java.io包中)
  • 企业如何实现数据从源端到消费端的全链路加工逻辑可视化?
  • Toxicity of the Commons: Curating Open-Source Pre-Training Data
  • Python 单例模式工厂模式和classmethod装饰器
  • 计算机键盘简史 | 键盘按键功能和指法
  • 【数字信号处理】期末综合实验,离散时间信号与系统的时域分析,离散信号 Z 变换,IIR 滤波器的设计与信号滤波,用窗函数法设计 FIR 数字滤波器
  • 面试技术点之安卓篇
  • Windows Terminal ssh到linux
  • 自适应卡尔曼滤波(包括EKF、UKF、CKF等)的创新思路——该调什么、不该调什么
  • SpringBoot项目监听端口接受数据(NIO版)
  • QT实战--带行号的支持高亮的编辑器实现(2)
  • (翻译)网络安全书籍推荐列表
  • TcpServer 服务器优化之后,加了多线程,对心跳包进行优化
  • 黑马程序员Java项目实战《苍穹外卖》Day12
  • 经纬度解析到省市区【开源】
  • bug:uniapp运行到微信开发者工具 白屏 页面空白
  • 旧版本 MySQL 处理字符表情写入问题
  • vue使用v-if和:class完成条件渲染
  • Docker:WARNING: Published ports are discarded when using host network mode 解决方法