当前位置:  开发笔记 > 编程语言 > 正文

Tensorflow教程:输入管道中的重复混洗

如何解决《Tensorflow教程:输入管道中的重复混洗》经验,为你挑选了1个好方法。

在Tensorflow读数数据教程中,给出了一个示例输入管道.在该管道中,数据被洗牌两次,无论是在内部string_input_producer还是在内部shuffle batch generator.这是代码:

def input_pipeline(filenames, batch_size, num_epochs=None):
  # Fist shuffle in the input pipeline
  filename_queue = tf.train.string_input_producer(
      filenames, num_epochs=num_epochs, shuffle=True)

  example, label = read_my_file_format(filename_queue)
  min_after_dequeue = 10000
  capacity = min_after_dequeue + 3 * batch_size
  # Second shuffle as part of the batching. 
  # Requiring min_after_dequeue preloaded images
  example_batch, label_batch = tf.train.shuffle_batch(
      [example, label], batch_size=batch_size, capacity=capacity,
      min_after_dequeue=min_after_dequeue)

  return example_batch, label_batch

第二次洗牌是否有用?混洗批量生成器的缺点在于,min_after_dequeue示例总是被预先存储在存储器中以允许有用的混洗.我的图像数据确实很大,内存消耗很大.这就是我考虑使用的原因normal batch generator.将数据混洗两次有什么好处吗?

编辑:附加问题,为什么string_input_producer初始化只有默认容量32?将batch_size的倍数作为容量不是有利的吗?



1> dga..:

是的 - 这是一种常见的模式,它以最一般的方式显示.在string_input_producer洗牌中数据文件的读取次序.为了提高效率,每个数据文件通常包含许多示例.(读取一百万个小文件非常慢;最好每个1000个例子读取1000个大文件.)

因此,来自文件的示例被读入混洗队列,其中它们以更精细的粒度进行混洗,使得来自相同文件的示例不总是以相同的顺序训练,并且在输入文件之间混合.

有关更多详细信息,请参阅在tensorflow中与许多输入数据文件进行良好混合

如果你的文件每个只包含一个输入示例,你不需要多次洗牌,只能使用a string_input_producer,但请注意,你仍然可以从阅读后拥有一些图像的队列中受益,这样你就可以了可以重叠您的网络的输入和培训.在queue_runner一个batchshuffle_batch将在一个单独的线程中运行,确保I/O在后台发生的事情,并且图像随时为您提供培训.而且,当然,创建微型飞机以进行训练通常是很好的速度.

推荐阅读
mylvfamily
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有