Tensorflow CIFAR10 教程:确定训练过程中的 epoch 数
Posted
技术标签:
【中文标题】Tensorflow CIFAR10 教程:确定训练过程中的 epoch 数【英文标题】:Tensorflow CIFAR10 Tutorial: Determining number of epochs in training process 【发布时间】:2017-10-24 13:06:09 【问题描述】:这可能是一个非常基本的问题。我是深度学习的新手,从我收集的数据到现在,通常会创建一批数据,一旦使用了所有训练数据(或“足够”),该过程会重复几次(每次迭代称为一个纪元)。但是,当我看 CIFAR10 的教程时:
CIFAR10 Tensorflow tutorial
没有时代这样的东西。此处仅提及它们: cifar10.py
如NUM_EXAMPLES_PER_EPOCH_FOR_TRAIN
、NUM_EXAMPLES_PER_EPOCH_FOR_EVAL
和NUM_EPOCHS_PER_DECAY
。
他们是否使用它来隐式定义时代?
num_batches_per_epoch = NUM_EXAMPLES_PER_EPOCH_FOR_TRAIN /FLAGS.batch_size
我也问,因为我有点困惑我应该如何在这里设置num_epochs
argument(在我自己的模型中):
tf.train.string_input_producer(...,num_epochs=num_epochs,...)`
我应该将其设置为NONE
还是必须先计算 epoch 数?
【问题讨论】:
【参考方案1】:你的问题有两点:
理解:在大多数情况下,一个 epoch 并不意味着一次迭代。一个 epoch 意味着通过完整的训练集。 NUM_EXAMPLES_PER_EPOCH_FOR_TRAIN
等被定义为 here 为 50000。CIFAR-10 有 50000 个样本用于训练。然后就很容易理解了num_batches_per_epoch
。
至于编码,在tf.train.string_input_producer(...,num_epochs=num_epochs,...)
,您可以查看API,它解释了num_epochs
。对于CIFAR-10,你不要指定num_epochs
(因为这个string_input_producer
不会直接读取每个示例。数据库分为5个部分/文件,每个部分存储10000个示例,string_input_producer
读取文件) .
【讨论】:
max_steps
标志设置为 1000000 个批次。每批有128个例子。说他们有 (1000000*128)/50000 = 2560 个时期是否正确?所以基本上我可以将 num_epochs 设置为 None 并在一定数量的步骤停止一切
是的,他们有 2560 个 epoch。如果将tf.train.string_input_producer(...,num_epochs=num_epochs,...)
中的num_epochs
设置为None,读卡器不会停止读取数据,直到整个程序停止时步数到达max_steps
;如果指定num_epochs
,则阅读器仅读取num_epochs
次其输入,然后提示OutOfRange
错误。以上是关于Tensorflow CIFAR10 教程:确定训练过程中的 epoch 数的主要内容,如果未能解决你的问题,请参考以下文章
github/tensorflow/models/tutorials/image/cifar10/cifar10_input.py