如何编写带有预加载的caffe python数据层?

2023-12-08

如何编写异步数据层以在执行其他处理时预加载批次?有一些示例代码吗?谢谢


有多种方法可以实现您想要的目标。我将尝试在这里勾勒出一种选择。

系统的总体视图是:你有n Loader异步加载数据并送入队列。然后该层读取batch_size队列中的项目并送入网络forward()功能。

import caffe, multiprocessing

class Loader(multiprocessing.Process):
  def __init__(self, outq, *args, **kwargs):
    super(Loader, self).__init__()
    self.daemon = True
    self.outq = outq
    self.start()  # start working

  def run(self):
    while True:  # read and never stop at all!
      try:
        # do your magic here
        # assuming you load x,y pairs
        self.outq.put((x[None, ...], y[None, ...]))  # add singleton "batch" dimension
      except Exception as e:
        # handle errors?
        pass

 class MultiProcessInputLayer(caffe.Layer):
   def setup(self, bottom, top):
     # verify no bottoms, right number of tops etc.
     self.dataQ = multiprocessing.Queue()
     for _ in xrange(n):
       Loader(self.dataQ)  # start n Loaders
     # some other stuff here...

   def reshape(self, bottom, top):
     # reshape the inputs to the right sizes

   def forward(self, bottom, top):
     for i in xrange(batch_size):
       item = self.dataQ.get()
       top[0].data[i, ...] = item[0]
       top[1].data[i, ...] = item[1]

   def backward(self, top, propagate_down, bottom):
     pass  # no backward for data layer

我通过艰难的方式学到的一些提示和技巧:
1. Use multiprocessing并不是threading包因为GIL.
2. 有时(例如,如果batch_size非常大)需要很长时间forward()从队列中逐项读取以形成每个批次。在这种情况下,您可以添加另一个multiprocessing.Process这将异步读取batch_size物品来自self.dataQ并将整批写入self.batchQ. Then forward()只会等待一个single项目来自self.batchQ每次通话时。
3. 注意不要复制太多数据。使用大图像/标签可能会使所有这些复制成为瓶颈。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何编写带有预加载的caffe python数据层? 的相关文章

随机推荐

  • 寻找 C# 注册表类 [已关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 寻找包装调用以执行以下操作的 C 类 读取和写入键值 读取和写入密钥条目 枚举键中的条目 这个很重要 例如 需要列出以下位置的所有条目 HKEY L
  • 如何使用装饰器将变量注入作用域?

    免责声明 可能有更多的Python方式来做我想做的事情 但我想知道Python的作用域在这里是如何工作的 我正在尝试找到一种方法来制作一个装饰器 该装饰器可以执行诸如将名称注入另一个函数的作用域之类的操作 这样该名称就不会泄漏到装饰器的作用
  • 根据参考重新排序多索引数据框列

    我有一个多索引数据框 其名称附加到列级别 数据表看起来像这样 df1 TIME TMC 111N1 111P2 111N3 111P4 DATE EPOCH 0 143 113 103 NaN 1 183 NaN NaN NaN 2 NaN
  • CodeIgniter 与 PHPExcel 致命错误无法重新声明类 IOFactory

    我正在尝试将 PHPExcel 与 CodeIgniter 一起使用 我的问题是当我想使用下面的方法时 我得到了PHP 致命错误 无法重新声明类 IOFactory 如果您不确定文件类型 则可以在使用 createReader 方法实例化读
  • 在切片末尾工作是否惯用?

    我正在阅读 Go 的compress flate包 我发现了这段奇怪的代码 1 n int32 len list list list 0 n 1 list n maxNode 在上下文中 list保证指向后面有更多数据的数组 这是一个私有函
  • 如何在 Laravel PHP 框架中合并两个集合而不丢失(丢失)键?

    我是 Laravel PHP 的新手 我正在做我的个人 玩具项目 我遇到了一个我已经在 Google 上搜索了很长时间的问题 但是 我无法找出完美的解决方案 问题是 我有两个集合 questions and answers 我想将它们合并到
  • 用欧拉化求解中文Postman算法

    我想在不存在欧拉循环的图中解决中国邮递员问题 所以基本上我正在寻找图中的一条路径 该路径恰好访问每个边一次 并在同一节点处开始和结束 当且仅当每个节点具有相同数量的进入和离开图的边时 图才会有欧拉循环 显然我的图表没有 我发现欧拉化 制作欧
  • System.Text.Json 中可以进行多态反序列化吗?

    我尝试从 Newtonsoft Json 迁移到 System Text Json 我想反序列化抽象类 Newtonsoft Json 为此提供了 TypeNameHandling 有没有办法通过 net core 3 0 上的 Syste
  • 如何在不使用浏览器的情况下从 .NET Web 服务代码从 OKTA 获取 SAML 令牌?

    我们拥有由 Kendo UI 和后端 NET Web 服务构建的混合移动应用程序 所有来自 UI 的调用都是通过 ajax 进行的 现在我们需要将应用程序集成到 OKTA 中以进行用户身份验证 但不确定如何直接从 Web 服务调用中从 OK
  • 在 ggplot2 中使用 Unicode 字符(加减号)

    我正在尝试构建一个包含 unicode 字符的图 正负号sign U 00B1 以下是一些虚假数据 library tidyverse set seed 1 df lt crossing Rated Movement c Running J
  • 在Java中将列表转换为数组[重复]

    这个问题在这里已经有答案了 我怎样才能转换List to an Array在Java中 检查下面的代码 ArrayList
  • 在启用 ASP.NET 兼容性/会话的环境中,AJAX 可访问的长时间运行的服务任务会阻止后续 AJAX 服务请求

    我遇到了以下链接中描述和解决的问题 http blogs msdn com b silverlightws archive 2009 09 30 having a pollingduplex service and any other wc
  • 不太清楚 Cassandra 的反模式

    假设有一个表 其结构如下 create table cities root text name text primary key root name with clustering order by name asc for getting
  • 如何检查图像的尺寸,以便按比例缩小图像以避免失真?

    当人们写文章时 他们会提交一张照片来说明事件 但是 展示的空间并不宽阔 所以 我想减少它们的宽度和 或高度 同时保持它们的原始比例 否则 图像会失真 假设最大宽度为 300px 任何比这更宽的宽度都会减少到 300 像素 但是 我希望高度减
  • 从 Nest Cam 访问直播

    我是一款名为 Feather featherapp co 的 Nest 综合 Apple TV 应用程序的开发人员 我遇到的一个问题是 用户希望能够查看摄像头的实时直播 有谁确定了访问摄像机实时画面的方法吗 我已经做了相当多的逆向工程 但我
  • 如何在spark scala中重命名S3文件而不是HDFS

    我在 S3 中存储了大约 100 万个文本文件 我想根据文件夹名称重命名所有文件 我怎样才能在 Spark scala 中做到这一点 我正在寻找一些示例代码 我正在使用 zeppelin 来运行我的 Spark 脚本 下面的代码我已经按照答
  • 使用 R 将图形导出到 .eps 文件

    如何将图表导出为 eps 格式文件 我通常将图表导出到 pdf 文件 使用 pdf 功能 效果非常好 但是 现在我必须导出到 eps 文件 我发现创建后记的最简单方法如下 使用setEPS 命令 setEPS postscript what
  • 将 HTML 转换为 R Markdown

    有没有办法转换html文件 例如https cran r project org web packages tidytext vignettes tidytext html 并将其转换为可执行的 R Markdown 文件 rmd 这是我使
  • Android - 启动图库文件夹并选择图像

    我正在做一个需要使用图库查看器的应用程序 我正在使用一个按钮来启动画廊活动 通过使用此代码 startActivity new Intent Intent ACTION VIEW Uri parse content media extern
  • 如何编写带有预加载的caffe python数据层?

    如何编写异步数据层以在执行其他处理时预加载批次 有一些示例代码吗 谢谢 有多种方法可以实现您想要的目标 我将尝试在这里勾勒出一种选择 系统的总体视图是 你有n Loader异步加载数据并送入队列 然后该层读取batch size队列中的项目