在Tensorflow中,似乎可以在训练时间,从原始图像(或数据)创建批处理时,或者图像已经是静态时,进行预处理。鉴于理论上 ,预处理应该花费大致相等的时间(如果使用相同的硬件完成),是否有 实用 <= strong>在训练前进行数据预处理(甚至是数据增强)的缺点比在实时训练期间不利?
作为一个附带问题,如果在培训期间没有完成数据扩充甚至可以在Tensorflow中完成吗?
答案 0 :(得分:3)
在进行数据预处理时是否存在任何实际缺点(或 甚至数据增加)在训练之前比在训练期间 实时?
是的,有优势( +++ )和劣势( --- ):
培训前预处理 :
在培训期间预处理 (&#34; 实时 &#34;):
详细讨论了一些具体方面:
(1) 重播实验 &#34;使用相同的数据&#34;在训练之前生成的数据集很简单。然而,这可以通过存储用于实时数据生成的种子来优雅地解决(甚至更多!)。
(2): 用于预处理的训练运行时 :有一些方法可以避免昂贵的预处理管道妨碍你的实际训练。 Tensorflow本身建议使用许多(CPU - )Queues
填充threads
,以便数据生成可以独立地跟上GPU数据消耗。您可以在input pipeline performance guide。
(3): 张量流中的数据扩充
作为一个附带问题,数据扩充甚至可以在Tensorflow中完成 如果没有完成
(我认为你的意思是) 之前 培训?
是的,tensorflow提供了一些扩充功能。在标量/向量(或更多维数据)的值增加方面,您可以使用tf.multiply
或其他基本数学运算轻松地构建一些东西。对于图像数据,实现了几个操作(请参阅tf.image和tf.contrib.image),这些操作应涵盖许多扩充需求。
github上有现成的preprocessing examples,其中一个在CNN tutorial(cifar10)中使用和描述。
就个人而言,我总是会尝试使用实时预处理,因为生成(可能很大)的数据集感觉很笨拙。但它完全可行,我已经多次看到它(如上所述)它肯定有它的优点。
答案 1 :(得分:2)
我一直想知道同样的事情,并且对我的训练期间图像处理性能感到失望。我花了一段时间才意识到图像处理的开销有多大。
我将使自己成为一个很好的肥胖多汁的预处理/增强数据文件。一夜之间运行,然后在第二天运行,效率提高两倍!
我正在使用一台GPU机器,对我来说很明显,逐件模型构建是最佳选择。但是,如果您有不同的硬件,工作流数学可能看起来不同。例如,在我的Macbook-Pro上,张量流速很慢(在CPU上)并且图像处理速度很快,因为它是在笔记本电脑的GPU上自动完成的。现在我已经转移到一台合适的GPU机器,tensorflow运行速度提高了20倍,图像处理成为瓶颈。
计算出你的增强/预处理需要多长时间,找出你重复使用它的频率然后再进行数学运算。