Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是Keras&x27中保证的批次顺序;订单排队者?_Keras_Queue_Sequence - Fatal编程技术网

是Keras&x27中保证的批次顺序;订单排队者?

是Keras&x27中保证的批次顺序;订单排队者?,keras,queue,sequence,Keras,Queue,Sequence,我有一个自定义的keras.utils.sequence,它以特定(和关键)顺序生成批 但是,我需要跨多个核心并行批处理生成。名称“orderedQueuer”是否意味着结果队列中批次的顺序保证与原始keras.utils.sequence的顺序相同 我认为此订单无法保证的原因: OrderedeQueuer在内部使用python的多处理异步应用 Keras的文档明确指出,OrderedQueuer保证不会重复批次,但并不保证订单 我认为这是: 名字 我知道keras.utils.sequenc

我有一个自定义的
keras.utils.sequence
,它以特定(和关键)顺序生成批

但是,我需要跨多个核心并行批处理生成。名称“
orderedQueuer
”是否意味着结果队列中批次的顺序保证与原始
keras.utils.sequence
的顺序相同

我认为此订单无法保证的原因:

  • OrderedeQueuer在内部使用python的
    多处理
    异步应用
    
    
  • Keras的文档明确指出,
    OrderedQueuer
    保证不会重复批次,但并不保证订单
  • 我认为这是:

  • 名字
  • 我知道
    keras.utils.sequence
    对象是可索引的
  • 我在Keras的github上找到了测试脚本,这些脚本似乎是为了验证订单而设计的——尽管我找不到任何关于这些脚本是否通过,或者它们是否真正具有决定性的文档 如果这里的顺序没有得到保证,我将欢迎任何关于如何在保持保证顺序的同时对批量准备进行并行化的建议,附带条件是它必须能够对任意python代码进行并行化-我相信例如
    tf.data.Dataset
    API不允许这样做(
    tf.py_函数
    调用原始python进程)。

    是的,它是有序的

    通过以下测试亲自检查

    首先,让我们创建一个伪
    序列
    ,在等待随机时间后只返回批次索引(随机时间是为了确保批次不会按顺序完成):

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

    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)
    
    结果:

    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个工人快得多->它正在并行化ok
    • 这两种情况的结果都是有序的

    太棒了-非常感谢您清晰、解释清楚的回答!@hanneswhittingham,:)-很乐意帮忙。如果你认为它回答了你的问题,请把这个标记为“回答”。
    test(1)
    test(8)