python - 关于keras.utils.Sequence的澄清

标签 python multithreading keras deep-learning multiprocessing

Keras几乎没有关于keras.utils.Sequence的信息,实际上我想从keras.utils.Sequence派生我的批处理生成器的唯一原因是我不想自己写带有线程的线程池,但是我不确定这是否是我的任务的最佳选择,这是我的问题:

  • 如果我有随机生成器而我没有,__len__应该返回什么
    带有样本的任何预定义“列表”。
  • 怎么keras.utils.Sequence 应该与fit_generator一起使用,我对此感兴趣
    max_queue_sizeworkersuse_multiprocessingshuffle 参数大多。
  • 在喀拉拉邦还有哪些其他选择?
  • 最佳答案

  • 想要的任何内容,考虑到一个纪元将从Sequence中获得len批处理。
  • 没有 secret 可与其他任何生成器一起使用,区别在于您可以执行steps_per_epoch=len(generator)steps_per_epoch=None
  • max_queue_size:任何值,它将加载将在内存中等待直到其进入
  • 模型的批处理
  • workers:任何值,它将是将加载批处理
  • 的并行“线程”的数量(如果名称不正确,请原谅)
  • use_multiprocessing:我不知道这个。这对我来说不是必需的,而且我唯一的尝试是它的 buggy 足以卡住我的机器
  • shuffle:来自the documentation: bool 值。是否在每个纪元开始时对批次的顺序进行混洗。仅用于Sequence实例(keras.utils.Sequence)。当steps_per_epoch不为None时无效。
  • 我认为就是这样。我想,如果您想对模型本身进行线程化,那么您可能想阅读有关多GPU训练的信息。

  • Sequence相对于常规生成器的优势:

    使用序列,可以跟踪已获取的批次,将哪些批次发送到哪个线程进行加载,并且永远不会发生冲突,因为它基于索引。

    使用生成器时,并行处理将无法跟踪已经采摘了哪些批次,因为线程之间不会互相交谈,并且除了按顺序逐批生产之外别无选择。

    生成器和序列相对于循环的优势

    在一个循环中,您将“等待批处理加载”,“等待模型训练”,“等待批处理加载”,“等待模型训练”。

    使用fit_generator,批处理将在模型训练时“加载”,而这两种情况同时发生。

    对于非常简单的发电机,不会有太大影响。对于复杂的生成器,增强器,大图像加载器等,生成时间非常重要,并且可能会严重影响您的速度。

    关于python - 关于keras.utils.Sequence的澄清,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53620163/

    相关文章:

    c - 使用同步线程有什么好处?

    python - 如何将 1D numpy 数组从 keras 层输出更改为图像(3D numpy 数组)

    javascript - 处理 javascript 的最简单的网络抓取工具是什么

    python - cosine_similarity 2 pandas df 列之间的余弦距离

    c++ - 我可以在核心 i7 上获得的最大 cpu 使用率是多少

    java - 如何从服务器连接两个客户端

    python - 带有 keras 的 CNN 架构

    python - tensorflow - 无法将原型(prototype)文件构建到描述符池中

    python - 保存并使用 TFIDF 矢量器作为将来的示例,然后导致尺寸错误

    python - 对 Python 最小测验感到困惑