Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/340.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
Python Tensorflow:TFRecord文件的预处理是否比实时数据预处理快?_Python_Machine Learning_Tensorflow_Computer Vision_Deep Learning - Fatal编程技术网

Python Tensorflow:TFRecord文件的预处理是否比实时数据预处理快?

Python Tensorflow:TFRecord文件的预处理是否比实时数据预处理快?,python,machine-learning,tensorflow,computer-vision,deep-learning,Python,Machine Learning,Tensorflow,Computer Vision,Deep Learning,在Tensorflow中,预处理似乎可以在训练期间、从原始图像(或数据)创建批处理时或图像已经是静态的情况下进行。考虑到理论上,预处理所需的时间应该大致相等(如果它们使用相同的硬件完成),在训练前进行数据预处理(甚至数据增强)是否比在实时训练期间有任何实际的缺点 作为一个附带问题,如果在训练期间没有进行数据增强,那么Tensorflow中是否可以进行数据增强?我一直在想同样的事情,并且对我在训练期间的图像处理性能感到失望。我花了一段时间才意识到图像处理的开销有多大 我将为自己制作一个漂亮、肥美、

在Tensorflow中,预处理似乎可以在训练期间、从原始图像(或数据)创建批处理时或图像已经是静态的情况下进行。考虑到理论上,预处理所需的时间应该大致相等(如果它们使用相同的硬件完成),在训练前进行数据预处理(甚至数据增强)是否比在实时训练期间有任何实际的缺点


作为一个附带问题,如果在训练期间没有进行数据增强,那么Tensorflow中是否可以进行数据增强?

我一直在想同样的事情,并且对我在训练期间的图像处理性能感到失望。我花了一段时间才意识到图像处理的开销有多大

我将为自己制作一个漂亮、肥美、多汁的预处理/增强数据文件。通宵运行,第二天再来,效率加倍

我使用的是一台GPU机器,对我来说,一块一块地构建模型是一条很明显的路。但是,如果您有不同的硬件,工作流可能会有所不同。例如,在我的Macbook上,Pro tensorflow速度很慢(在CPU上),图像处理速度很快,因为它是在笔记本电脑的GPU上自动完成的。现在我已经换了一台合适的GPU机器,tensorflow的运行速度提高了20倍,图像处理是瓶颈

只需计算出扩充/预处理需要多长时间,计算出重用它的频率,然后进行计算

进行数据预处理(或 即使是数据扩充)在培训之前也比在 实时的

是的,有优点(++)和缺点(--):

培训前的预处理

  • --需要存储预处理的样本:磁盘空间消耗*(1)
  • --只能生成“有限”数量的样本
  • ++培训期间无运行时间
  • --。。。但样本总是需要从存储器中读取,即存储器(磁盘)i/O可能成为瓶颈
  • --不灵活:更改数据集/扩充需要生成新的扩充数据集
  • ++用于Tensorflow:使用任何高级图像API(open cv、PIL等)轻松处理numpy.ndarray或其他数据格式,以进行增强,甚至使用您喜欢的任何其他语言/工具
培训期间的预处理(“实时”):

  • ++可以生成无限量的样本(因为它是动态生成的)
  • ++灵活:更改数据集/扩充只需要更改代码
  • ++如果数据集适合内存,则在读取一次数据后不需要磁盘I/O
  • --将运行时添加到培训中*(2)
  • --对于Tensorflow:作为图形的一部分构建预处理需要使用张量,并限制使用Ndarray或其他格式的API。*(3)
详细讨论了一些具体方面:

  • (1) 使用训练前生成的数据集,“使用相同数据”再现实验有点简单。但是,通过存储种子以生成实时数据,可以优雅地解决这一问题(甚至更多!)

  • (2) :预处理的培训运行时:有一些方法可以避免昂贵的预处理管道妨碍您的实际培训。Tensorflow本身建议使用多个(CPU-
    线程来填充
    队列
    ,以便数据生成能够独立地跟上GPU数据消耗。有关这方面的更多信息,请参阅

  • (3) :tensorflow中的数据扩充

    作为一个附带问题,数据扩充甚至可以在Tensorflow中完成吗 如果在
    (我想你的意思是)训练前没有做

    是的,tensorflow提供了一些增强功能。在标量/向量(或更高维数据)的值增强方面,您可以使用
    tf.multiply
    或其他基本数学运算轻松构建一些东西。对于图像数据,实施了多个操作(请参见和),这些操作应能满足许多增强需求

    github上有现成的,其中一个在(cifar10)中使用和描述


就我个人而言,我总是尝试使用实时预处理,因为生成(可能是巨大的)数据集感觉很笨拙。但是它是完全可行的,我已经看过很多次了,而且(正如你上面看到的)它肯定有它的优点