Keras 的 OrderedEnqueuer 是否保证了批次的顺序?

2024-02-24

我有一个习惯keras.utils.sequence它以特定(且关键)的顺序生成批次。

但是,我需要跨多个核心并行化批量生成。名字是不是'OrderedEnqueuer' 意味着结果队列中批次的顺序保证与原始队列的顺序相同keras.utils.sequence?

我认为这个订单不能得到保证的原因是:

  1. OrderedEnqueuer 使用 pythonmultiprocessing's apply_async内部。
  2. Keras 的文档明确指出OrderedEnqueuer保证不重复批次 - 但不保证订单。

我这么认为的理由是:

  1. 名字!
  2. 我明白那个keras.utils.sequence对象是可索引的。
  3. 我在 Keras 的 github 上找到了测试脚本,这些脚本似乎是为了验证顺序而设计的 - 尽管我找不到任何有关这些脚本是否通过或是否真正具有决定性的文档。

如果这里的顺序不能保证,我欢迎任何关于如何在保持保证顺序的同时并行化批处理准备的建议,条件是它必须能够并行化任意Python代码 - 我相信例如tf.data.DatasetAPI 不允许这样做(tf.py_function回调到原始 python 进程)。


是的,已经订购了。

通过以下测试亲自检查一下。

首先,我们创建一个虚拟对象Sequence在等待随机时间后仅返回批次索引(随机时间是为了确保批次不会按顺序完成):

import time, random, datetime
import numpy as np
import tensorflow as tf

class DataLoader(tf.keras.utils.Sequence):
    def __len__(self):
        return 10
    def __getitem__(self, i):
        time.sleep(random.randint(1,2))
        #you could add a print here to see that it's out of order
        return i

现在让我们创建一个测试函数来创建入队并使用它。 该函数获取工作人员的数量并打印所花费的时间以及返回的结果。

def test(workers):
    enq = tf.keras.utils.OrderedEnqueuer(DataLoader())
    enq.start(workers = workers)
    gen = enq.get()

    results = []
    start = datetime.datetime.now()
    for i in range(30):
        results.append(next(gen))
    enq.stop()
    print('test with', workers, 'workers took', datetime.datetime.now() - start)
    print("results:", results)

Results:

test(1)
test(8)

1 名工人的测试耗时 0:00:45.093122
结果:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3 , 4, 5, 6, 7, 8, 9]
8 名工人的测试耗时 0:00:09.127771
结果:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3 , 4, 5, 6, 7, 8, 9]

请注意:

  • 8 个工作线程比 1 个工作线程快得多 -> 可以并行化
  • 两种情况的结果均已排序
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Keras 的 OrderedEnqueuer 是否保证了批次的顺序? 的相关文章

随机推荐

  • Imap 搜索条件 - imaplib (python)

    我正在使用 python 的 imaplib 并且遇到了一个奇怪的行为 我真的不知道这是否是 imap 或 imaplib 问题 功能 所以我希望有人能给我一些启发 在我的项目期间 我对我的 Gmail 邮箱进行了多次搜索 想象一下我使用以
  • symfony 单元测试:添加/修改表单操作

    我有一个没有操作的表单 用 javascript 提交 我试图为其编写一个单元测试 但它失败了 因为缺少 action 属性 InvalidArgumentException 当前 URI 必须是绝对 URL 有没有办法在单元测试中添加它或
  • 在派生抽象类中强制执行事件

    我正在尝试创建我所认为的翻译类 以便我的程序可以与各种目标平台对话 每个平台都将由抽象类的单独实现来处理 为了简单起见 我已经削减了一些内容 我有一个抽象类 有几个抽象方法 abstract class ControllerBase pub
  • 如何使用 RefCursor 返回类型测试 Oracle 存储过程?

    我正在寻找有关如何在 SQL Developer 或 Embarcardero Rapid XE2 中测试 Oracle 存储过程的良好解释 谢谢 就像是 create or replace procedure my proc p rc O
  • Quartz.net 中每次执行后 JobData 不会持久化

    我有一份工作想要跟踪 50 次最新运行 由于某种原因 状态似乎没有存储在我的简单原型中 PersistJobDataAfterExecution public class ApiJob IJob private const string J
  • 使用 jsTree 进行延迟加载

    我试图在 jtree 扩展时动态加载它们的节点 我发现的小文档位于末尾这一页 http www jstree com docs json 我找到了一些解决方案 可以使用类似的循环逐一创建节点this one https stackoverf
  • 冬眠,偷懒还是不偷懒? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 I have entity A 与多对多关系entity B 所以表格布局是 A AB mapping table B 获取实体A的对象 我打电
  • 仅当使用reactJS 城市名称不匹配时才显示错误消息

    我有一个搜索框 当用户输入 5 个或更多字符时 它应该在搜索框中显示完整地址 IT 工作正常 但现在的问题是当城市名称不匹配时 它应该显示错误消息 问题是 匹配的城市名称和不匹配的城市都显示错误消息 我该如何解决这个问题 请问有人可以帮我吗
  • 为什么在删除实体时会出现 StaleObjectStateException?

    在我的 Spring Boot Web 应用程序中 我有一个控制器 它提供了一种从数据库中删除实体的方法 该方法又调用 DAO 类 然而 当我打电话时entityManager remove entity 我收到一个StaleObjectS
  • SQL Server ON DELETE 触发器

    我正在尝试创建一个基本数据库触发器 当删除database2 table2 中的行时 该触发器有条件地从database1 table1 中删除行 我是触发器新手 希望学习实现此目标的最佳方法 这是我到目前为止所拥有的 建议 CREATE
  • 如何使用 GDB 调试共享对象库中的函数?

    我正在尝试验证共享对象库中函数的功能 在带有main函数 我会简单地start程序和 gdb 会自动在 main 上设置断点 但这显然在这里不可用 假设我有一些add c long add long x long y return x y
  • 在 Xamarin.Forms 中处理 Android 推送通知操作

    所以我只是在我的 Xamarin Forms Android 应用程序中实现了 FCM本指南 https learn microsoft com en us azure app service mobile app service mobi
  • 写“::namespace::identifier”和“namespace::identifier”有什么区别?

    我在代码中看到了这两种方法 您能解释一下两者之间有什么区别吗 我认为它与 C 完成名称空间查找的方式有关 您能否也提供一些有关此的信息 或者可能是一个好的文档的链接 谢谢 Example include
  • Is-大括号-可构造类型特征

    如何检查是否特定类型typename T可以从参数构造typename Args以这样的方式T Args 我知道std is constructible lt T Args gt 类型特征来自
  • 多行引导行

    我希望表单字段在台式机和平板电脑上的放置方式不同 目前 桌面上一切都很好 我身边有两个类似的案例 在第一个中 我有这样的内容 输入字段位于 div 中 div class row div class col md 3 col sm 6 di
  • ZF2:模块无法初始化

    我正在尝试开始使用 ZF2 但在编写教程 在 ZF 网站上 中的代码时遇到问题 我的代码 Module php
  • 如何使用 Android 版 Google Places API 获取 opening_hours

    我正在与适用于 Android 的 Google 地方信息 API https developers google com places android api 我想访问营业时间信息 我已经搜索并在Google Places API 网络服
  • 使用 boost::shared_ptr 有哪些潜在危险?

    使用时有哪些方式可能会搬起石头砸自己的脚boost shared ptr http www boost org doc libs release libs smart ptr shared ptr htm 换句话说 我在使用时要避免哪些陷阱
  • 在 Google Charts 中包含带有 MathJax 的 LaTeX 符号?

    在生成的树形图中谷歌图表 https developers google com chart interactive docs gallery orgchart我想包含使用 MathJax 生成的 LaTeX 符号 使用通常在 HTML 文
  • Keras 的 OrderedEnqueuer 是否保证了批次的顺序?

    我有一个习惯keras utils sequence它以特定 且关键 的顺序生成批次 但是 我需要跨多个核心并行化批量生成 名字是不是 OrderedEnqueuer 意味着结果队列中批次的顺序保证与原始队列的顺序相同keras utils