【发布时间】:2021-08-08 17:42:28
【问题描述】:
让我们从一个包含 1000 张图片的文件夹开始。
现在,如果我们使用 no generator 和 batch_size = 10 和 steps_per_epoch = 100,我们将使用每张图片作为 10 * 100 = 1000。所以增加steps_per_epoche 将(正确地)导致错误:
tensorflow:你的输入数据用完了;中断训练。确保您的数据集或生成器至少可以生成
steps_per_epoch * epochs个批次(在本例中为 10000 个批次)
另一方面,使用生成器会产生无穷无尽的图像:
datagenerator = ImageDataGenerator(
rescale=1./255,
shear_range=0.1,
zoom_range=0.1,
# ...
)
imageFlow = datagenerator.flow_from_directory(
image_dir_with_1000_pcs,
target_size=(150, 150),
batch_size=10,
class_mode='binary')
i = 0
for x, y in imageFlow:
print(x.shape) # batch of images
i += 1
if i > 3000:
break # I break, because it ENDLESSLY goes on otherwise
但是,如果我去跑步
history = model.fit(
imageFlow,
steps_per_epoch=101, # I increased this above 100!
epochs=5,
#...
)
我会得到同样的错误:为什么? model.fit() 获得了一个生成器,因此获得了无穷无尽的批次。无休止的批处理怎么会耗尽数据?
在发布这个问题之前,我阅读了:
【问题讨论】:
-
还期望数据增强的供应源源不断。我猜实施更改为
Dataset。您找到解决方法了吗?我一直在寻找它通过数据增强再次循环。 -
对不起,我在这里帮不了你,因为我只是在寻找对我没想到的行为的解释。但我认为你不需要解决这个问题,因为每个时代你都会得到不同的增强数据。因此,如果您愿意,无尽的时代 == 无尽的增强数据,或者?否则可以预先准备批次,这是一个简单的解决方法。
标签: python tensorflow keras