深度学习中的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 语句之后继续执行,重新去处理下一组索引范围,取出下一个批次的数据并返回,如此反复,直到整个数据集的样本都被划分成批次并返回完。

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

相关推荐
小明_GLC13 分钟前
Falcon-TST: A Large-Scale Time Series Foundation Model
论文阅读·人工智能·深度学习·transformer
Python_Study202513 分钟前
制造业数据采集系统选型指南:从技术挑战到架构实践
大数据·网络·数据结构·人工智能·架构
一只大侠的侠17 分钟前
【工业AI热榜】LSTM+GRU融合实战:设备故障预测准确率99.3%,附开源数据集与完整代码
人工智能·gru·lstm
weisian15124 分钟前
入门篇--知名企业-26-华为-2--华为VS阿里:两种科技路径的较量与共生
人工智能·科技·华为·阿里
棒棒的皮皮30 分钟前
【深度学习】YOLO模型精度优化 Checklist
人工智能·深度学习·yolo·计算机视觉
微尘hjx31 分钟前
【数据集 01】家庭室内烟火数据集(按比例划分训练、验证、测试)包含训练好的yolo11/yolov8模型
深度学习·yolov8·yolo11·训练模型·烟火数据集·家庭火灾数据集·火灾数据集
高洁0138 分钟前
CLIP 的双编码器架构是如何优化图文关联的?(2)
python·深度学习·机器学习·知识图谱
线束线缆组件品替网38 分钟前
Bulgin 防水圆形线缆在严苛环境中的工程实践
人工智能·数码相机·自动化·软件工程·智能电视
Cherry的跨界思维44 分钟前
【AI测试全栈:Vue核心】22、从零到一:Vue3+ECharts构建企业级AI测试可视化仪表盘项目实战
vue.js·人工智能·echarts·vue3·ai全栈·测试全栈·ai测试全栈
冬奇Lab1 小时前
【Cursor进阶实战·07】OpenSpec实战:告别“凭感觉“,用规格驱动AI编程
人工智能·ai编程