【问题标题】:How can I stream data directly into tensorflow as opposed to reading files on disc?如何将数据直接流式传输到 tensorflow,而不是读取磁盘上的文件?
【发布时间】:2023-03-26 03:32:01
【问题描述】:

到目前为止,我能够找到的每个 tensorflow 教程都是通过首先将训练/验证/测试图像加载到内存中然后对其进行处理来实现的。有没有人有关于将图像和标签作为输入到 tensorflow 的指南或建议?我有很多图像存储在不同的服务器上,我想将这些图像流式传输到 tensorflow 中,而不是将图像直接保存在我的机器上。

谢谢!

【问题讨论】:

    标签: input stream neural-network tensorflow


    【解决方案1】:

    Tensorflow 确实有 Queues,它支持流式传输,因此您不必将完整数据加载到内存中。但是,是的,默认情况下,它们仅支持从同一服务器上的文件读取。您遇到的真正问题是,您想从其他服务器加载内存数据。我可以想到以下方法来做到这一点:

    • 使用 REST 服务公开您的图像。在 python 中编写自己的队列机制并读取这些数据(使用 Urllib 或其他东西)并将其提供给 Tensorflow placeholders
    • 除了使用 python 队列(如上)之外,您还可以使用 Tensorflow 队列(参见answer),尽管它稍微复杂一些。优点是,与普通的 python 多线程队列相比,tensorflow 队列可以使用多个内核,从而为您提供更好的性能。

    • 使用网络挂载来欺骗您的操作系统,使其相信数据在同一台机器上。

    另外,请记住,在使用这种分布式设置时,您总是会产生网络开销(图像从服务器 1 传输到服务器 2 所花费的时间),这会大大降低您的训练速度。为了解决这个问题,您必须构建一个具有 fetch-execute 重叠的多线程排队机制,这需要付出很多努力。 IMO 更简单的选择是将数据复制到您的训练机中。

    【讨论】:

    【解决方案2】:

    您可以使用 Python 中的 sockets 包将一批图像和标签从您的服务器传输到您的主机。您的图表需要定义为将占位符作为输入。占位符必须与您的批量大小兼容。

    【讨论】:

      猜你喜欢
      • 2015-07-13
      • 2018-08-31
      • 1970-01-01
      • 1970-01-01
      • 2021-09-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-15
      相关资源
      最近更新 更多