首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >生成器(ImageDataGenerator)如何耗尽数据?

生成器(ImageDataGenerator)如何耗尽数据?
EN

Stack Overflow用户
提问于 2021-05-19 13:10:13
回答 1查看 330关注 0票数 3

让我们从一个包含1000个图像的文件夹开始。

现在,如果我们不使用生成器,batch_size = 10steps_per_epoch = 100,我们将使用每幅图片作为10 * 100 = 1000。因此,增加steps_per_epoche将(正确地)导致错误:

tensorflow:您的输入没有数据;中断培训。确保数据集或生成器至少可以生成steps_per_epoch * epochs批(在本例中为10000批)

另一方面,使用生成器将导致无休止的图像批次:

代码语言:javascript
复制
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

但是,如果我去跑步

代码语言:javascript
复制
history = model.fit(
      imageFlow,
      steps_per_epoch=101, # I increased this above 100!
      epochs=5,
      #...
)

我也会得到同样的错误:为什么?model.fit()会得到一个生成器,因此会得到无穷无尽的批。如果有无休止的批次,它怎么会耗尽数据呢?

在发表这个问题之前,我读到:

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-05-19 13:27:46

生成器(ImageDataGenerator)如何耗尽数据?

据我所知,它从生成器中创建了一个tf.data.Dataset,它不会无限地运行,这就是为什么您在拟合时会看到这种行为。

如果它是一个无限数据集,那么必须指定steps_per_epoch

编辑:如果您不指定steps_per_epoch,那么培训将在number_of_batches >= len(dataset) // batch_size时停止。在每一个时代都是这样的。

为了检查引擎盖下到底发生了什么,您可以检查来源。可以看到,创建了一个tf.data.Dataset,它实际上处理批处理和划时代迭代。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67603949

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档