【问题标题】:Keras delayed data augmentationKeras 延迟数据增强
【发布时间】:2018-07-18 13:37:00
【问题描述】:

我正在尝试在 Keras 中应用自定义图像增强技术。我正在使用 fit_generator 和生成器来生成图像。我想在说 20 个 epoch 之后才开始应用图像增强(所以前 20 个 epoch 不会有任何数据增强)。不幸的是,生成器没有时代的概念。知道怎么做吗?

【问题讨论】:

  • 为什么不适合两种不同的生成器——一种没有增强功能,一种有增强功能?
  • 你将如何根据时代从一个切换到另一个?
  • 嗯...训练 20 个 epoch,更改生成器,训练更多 epoch...
  • 这更好,因为steps_per_epoch 也应该改变。
  • 听起来不错,但我不明白如何在训练时更改生成器。目前我有类似的东西: model.fit_generator(myGenerator((x_train, y_train),batch_size, alpha ) , steps_per_epoch=60000//batch_size ,epochs=200,validation_data=myGeneratorTT((x_test, y_test),batch_size, alpha ) , validation_steps=10000//batch_size, callbacks=[F1F1,checkpointer]) ,它不在循环内,为我做所有的训练

标签: tensorflow keras


【解决方案1】:

最简单的方法是在没有实时增强的情况下训练 20 个 epoch(使用不带参数的 Keras ImageDataGenerator)并使用 ModelCheckpoint 回调保存模型。然后重新加载模型并继续使用 RA 进行训练(使用带有您选择的变换的 ImageDataGenerator)。

如果您希望一步完成该行为,您可以制作自己的 ImageDataGenerator 版本。您只需要进行以下更改:

def __init__(self,
             batch_counter=0,  # count the batches elapsed
             steps_per_epoch=0,  # pass steps per epoch into the custom ImageDataGenerator on init
             n_epoch = 0, # count the epochs elapsed

然后,只需修改 ImageDataGenerator 中的 NumpyArrayIterator 以增加这些变量,并且仅在 n_epochs 过去后调用 random_transform。例如。 self.image_data_generator.batch_counter += 1

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-05
    • 2019-05-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多