Tensorflow 数据集 - batch_size 和 steps_per_epoch

Tensorflow dataset- batch_size and steps_per_epoch

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

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

  2. 我希望在每个时期均值(例如 16*30)中将所有数量的样本馈送到网络中。所有样本都应以特定批次在每个时期馈入网络尺寸?这怎么可能?

我附上了用于训练的tensorboard图像。我有 250 个步骤,所以每一步图像都应该改变,但它没有?步骤编号很少更改,图像也是如此。为什么?

如果没有看到您的代码,很难判断发生了什么。通常,如果您将批量大小设置为 16 并将步长设置为 240,那么在一个时期内将处理 16 X 240 = 3840 张图像。如果您有 500 张图像,那么您将遍历整个数据集 7 次,外加另外 340 张图像。根据您构建输入管道的方式,情况可能并非如此。通常,您希望每个时期大致检查一次训练数据,因此我会将每个时期的步数设置为 (500//16)+1 =32。如果你想每个 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)