首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Tfrecord TF.image?

Tfrecord TF.image?
EN

Stack Overflow用户
提问于 2018-07-06 12:36:42
回答 1查看 762关注 0票数 3

我的印象是有一个预先计算的Tfrecord文件是给您输入函数的最有效的方式。但是,我一直看到像这一篇这样好看的文章,其中输入函数引用磁盘上的原始文件,并当场进行解码。

  1. 创建Tfrecord文件是否有好处,或者在输入函数中解码和准备每个示例是否同样有效(而不是让输入函数只对Tfrecord进行解码)?
  2. 在输入函数中使用直接原始文件时,如上面的示例所示,您将在哪里添加数据增强步骤?

我过去这样做的方式是,我有一个单独的脚本,如果引用某些文件,它将生成一个包含数据增强的Tfrecord文件,作为其中的一部分。例如,Tfrecord中的前n个图像是一个给定的图像,然后是它的随机转换等等。然后输入函数简单地解码每个记录并指定批处理、洗牌等。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-07 15:43:17

您可能有这样的印象,因为这种输入格式是在tensorflow网站上提出的,它被指定为“https://www.tensorflow.org/programmers_guide/datasets#basic_mechanics”,甚至是“https://www.tensorflow.org/versions/r1.0/programmers_guide/reading_data#file_formats”。

在我看来,TFRecord格式的主要好处是

  1. 它得到了tensorflow的一流公民支持,并有专门的功能来读取和解码它,
  2. 它是一种灵活的格式,可以存储多个不同类别的数据,而不仅仅是图像,
  3. 它可以存储多个记录,
  4. 它是便携式的。

然而,基于protobuf的格式本身并不是为了性能优先而设计的。例如,标签以纯文本形式存储,并对每条记录重复-因此,TFRecord文件可能最终会比纯文本csv文件大得多。。存储数值的方式也不是为了性能而设计的:用于编码值的位数不一定与输入类型相匹配(例如,一个uint8可以使用一个或两个字节存储,取决于它的值);更糟糕的是,负整数值使用10 (!)存储。不管是什么

根据我的经验,TFRecord文件从未为我的输入管道提供性能提升--充其量,它们与原始数据持平,大多数情况下它们的性能略差一些。另一方面,这种格式在tensorflow之外很大程度上是不为人所知的,即使在tensorflow中,您也需要在读取一条记录来调试它上稍微挠头一下。

因此,除非您努力实现可移植性,否则可以使用原始二进制数据,而不必担心会丢失太多;但是,如果您的文件非常小,请考虑在单个文件中分组几个示例以提高性能,或者使用更精细的方法(如HDF5 )。(如果可移植性是一个问题,那么我仍然会考虑使用HDF5进行基准测试,这也是可移植的)。

最后,不要认为我的话是理所当然的和基准格式为您的问题。开发团队提出的TFRecord的优点是,从将数据转换为此格式开始,您将发现许多关于如何使用它的示例。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51210639

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档