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_TRAINNUM_EXAMPLES_PER_EPOCH_FOR_EVALNUM_EPOCHS_PER_DECAY

他们是否使用它来隐式定义时代?

num_batches_per_epoch = NUM_EXAMPLES_PER_EPOCH_FOR_TRAIN /FLAGS.batch_size

我也问,因为我有点困惑我应该如何在这里设置num_epochsargument(在我自己的模型中):

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 数的主要内容,如果未能解决你的问题,请参考以下文章

Tensorflow之CIFAR-10介绍

github/tensorflow/models/tutorials/image/cifar10/cifar10_input.py

利用Tensorflow读取二进制CIFAR-10数据集

Cifar-10数据集及Tensorflow代码实现

TensorFlow 多 GPU InvalidArgumentError:cifar10_multi_gpu.py

Tensorflow.cifar_我的过程