Python Tensorflow:TFRecord文件的预处理是否比实时数据预处理快?
在Tensorflow中,预处理似乎可以在训练期间、从原始图像(或数据)创建批处理时或图像已经是静态的情况下进行。考虑到理论上,预处理所需的时间应该大致相等(如果它们使用相同的硬件完成),在训练前进行数据预处理(甚至数据增强)是否比在实时训练期间有任何实际的缺点Python Tensorflow:TFRecord文件的预处理是否比实时数据预处理快?,python,machine-learning,tensorflow,computer-vision,deep-learning,Python,Machine Learning,Tensorflow,Computer Vision,Deep Learning,在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提供了一些增强功能。在标量/向量(或更高维数据)的值增强方面,您可以使用
或其他基本数学运算轻松构建一些东西。对于图像数据,实施了多个操作(请参见和),这些操作应能满足许多增强需求 github上有现成的,其中一个在(cifar10)中使用和描述tf.multiply
就我个人而言,我总是尝试使用实时预处理,因为生成(可能是巨大的)数据集感觉很笨拙。但是它是完全可行的,我已经看过很多次了,而且(正如你上面看到的)它肯定有它的优点