【问题标题】:Tensorflow dataset- batch_size and steps_per_epochTensorflow 数据集 - batch_size 和 steps_per_epoch
【发布时间】:2021-02-23 11:45:14
【问题描述】:

enter image description here我正在研究一个图像分割问题,其中有一个 tensorflow 数据集格式的数据管道,并且也使用了 tensorflow 迭代器。 现在我将训练图像的数量从之前的 250 张增加到 500 张。我有一个单独的图像增强管道。我的问题是

  1. 即使我使用相同的batch_size=16,是否会因为图像数量的增加而产生影响?我已将 step_per_epoch 设置为 240。正如我从 Tensorboard 中每个时期的日志文件中看到的那样,网络为每个步骤仅输入 16 个图像并且重复相同的批次并且图像在单个时期的运行期间不会改变?那么这是否意味着它在所有 240 个步骤中只训练一组相同的 16 张图像?

  2. 我希望在每个 epoch 均值(例如 16*30)中将所有样本数量输入网络。每个 epoch 的所有样本都应该以一定的批大小输入网络?这怎么可能?

我附上了用于训练的张量板图像。我有 250 步,所以每一步图像都应该改变,但它不会?步数很少变化,图像也是如此。为什么?

【问题讨论】:

    标签: tensorflow tensorflow-datasets training-data batchsize


    【解决方案1】:

    如果没有看到您的代码,就很难知道发生了什么。通常,如果您将批量大小设置为 16,步数设置为 240,那么在单个 epoch 中将处理 16 X 240 = 3840 个图像。如果您有 500 张图像,那么您将完成 7 次完整的数据集以及额外的 340 张图像。根据您构建输入管道的方式,情况可能并非如此。通常,您希望每个 epoch 大致检查一次训练数据,因此我会将每个 epoch 的步数设置为 (500//16)+1 =32。如果您想在每个 epoch 中准确地检查一次数据,您可以使用下面的代码来查找每个 epoch 的批大小和步数。下面的代码对于确定验证数据的批大小和步骤很有用,因为在这种情况下,最好每个 epoch 只检查一次验证数据。

    length=500 # set this to the number of training images
    b_max= 50 # maximum batch size you will allow based on memory capacity
    batch_size=sorted([int(length/n) for n in range(1,length+1) if length % n ==0 and length/n<=b_max],reverse=True)[0]  
    steps=int(length/batch_size)
    

    【讨论】:

    • 如果处理了 3840 张图像,那对我来说没问题。但是当我检查我的张量板时,每个 epoch 只处理相同的 16 张图像。我的意思是所有的 16 张图像都被处理240 步。我知道它是 tensorflow.dataset 的一个案例,但我想将它传递给每个时期的整个数据集
    • 它应该遍历所有图像。需要看你的代码
    • 整个管道非常庞大,可以在这里发布。因为 tensorflow 数据集没有透明度。我在训练期间看不到它。我在 tensorboard 中看到了图像训练,并且同一组 16 幅图像在 tensorboard 中的每一步都没有变化。
    • 我只在我可以可视化的地方附上了张量板训练数据的图像
    猜你喜欢
    • 1970-01-01
    • 2019-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多