【问题标题】:is there any impact on model accuracy of batch learning while learning with tensorflow cnn使用 tensorflow cnn 学习时,对批量学习的模型准确性有影响吗
【发布时间】:2020-10-27 05:09:55
【问题描述】:

我正在处理大量图像
但是,当用python枕头解压时,python由于内存不足而停止
所以我只是切片图像并训练模型
例如

  1. 完整数据:1.jpg, 2.jpg~100.jpg
    =>学习 50 个 epoch
  2. 切片数据:batch 1->1.jpg~10.jpg,batch 2->11.jpg~20.jpg.....batch 10
    =>learn 50 epoch batch 1,learn 50 epoch batch 2....

模型的准确性有什么不同吗?
谢谢

【问题讨论】:

  • 数据集不适合内存是很常见的。尝试使用生成器,以便仅在内存中加载少量样本(一批图像)。当然,如果以这种方式交替训练,准确性会有所不同,

标签: python-3.x tensorflow conv-neural-network


【解决方案1】:

图像数据往往会占用大量内存。通常,如果您尝试将所有图像作为一个大数据集处理,您将收到内存耗尽错误。为了解决这个问题,数据被累积为图像的“批次”,并在训练期间作为模型的输入顺序提供。通常使用生成器来实现这一点。例如,假设您有 10,000 个训练图像,例如 300 x 300 rgb 像素。那是一个变化很大的数据量。因此,与其尝试一次处理所有 10,000 张图像,不如将其分批分解。 batch_size 可用于定义在任何时候处理和存储在内存中的图像数量。例如,如果您将 batch_size 设置为 50,则需要 200 个连续批次来处理一个训练时期的所有图像。 200 是 model.fit 中所谓的 steps_per_epoch。如果您愿意,您可以创建自己的生成器,但 keras 提供了几个 API 可以为您做到这一点。相关文档是 here. 我更喜欢使用 ImageDataGenerator.flow_from_directory 来提供所需的批量生成,同时也提供图像增强。批量大小可以在一定程度上影响模型性能以及影响训练持续时间。小批量通常会使训练持续时间更长,并导致每个时期的指标变化更大,但在避免陷入局部最小值方面有一些优势。较大的批量往往会减少整体训练持续时间。我通常会以不同的批量大小运行几次,以查看模型性能是否有显着变化。

【讨论】:

  • 惊人的解决方案。真的很感激。但这引出了另一个问题。如果我使用 imagedatagenerator,标签将根据文件结构返回为 int 类型,而不是“真实”标签(在我的情况下,分类。0~1048。预定义)。那么如果我预测,它将根据训练文件结构给出数值。这与我想要的不同(真实标签)。有没有办法解决这个问题?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-14
  • 2020-09-17
  • 1970-01-01
  • 2020-07-17
  • 1970-01-01
  • 2013-10-24
相关资源
最近更新 更多