【问题标题】:Convert model.fit_generator to model.fit将 model.fit_generator 转换为 model.fit
【发布时间】:2020-06-20 11:32:23
【问题描述】:

我在下面有代码,

train_datagen = ImageDataGenerator(
        rescale=1./255,
        shear_range=0.2,
        zoom_range=0.2,
        horizontal_flip=True)
test_datagen = ImageDataGenerator(rescale=1./255)
train_generator = train_datagen.flow_from_directory(
        'data/train',
        target_size=(150, 150),
        batch_size=32,
        class_mode='binary')
validation_generator = test_datagen.flow_from_directory(
        'data/validation',
        target_size=(150, 150),
        batch_size=32,
        class_mode='binary')

现在model.fit_generator定义如下:

model.fit_generator(
        train_generator,
        steps_per_epoch=2000,
        epochs=50,
        validation_data=validation_generator,
        validation_steps=800)

现在model.fit_generator 已被弃用,在这种情况下将model.fit_generator 更改为model.fit 的正确方法是什么?

【问题讨论】:

  • 顺便说一下,steps_per_epoch = int(steps_per_epoch/batch_size)。您的代码对于最新版本的 TensorFlow(TensorFlow 中的 Keras)无效。
  • @TimbusCalin 这里有什么问题?
  • 问题是steps_per_epoch应该等于训练样本数除以batch_size,而不是训练样本总数。

标签: keras tensorflow2.0 tensorflow2.x


【解决方案1】:

您只需将model.fit_generator() 更改为model.fit()

从 TensorFlow 2.1 开始,model.fit() 也接受生成器作为输入。就这么简单。

来自 TensorFlow 的官方文档:

警告:此功能已弃用。将来会被移除 版本。更新说明:请使用 Model.fit, 支持生成器。

【讨论】:

    【解决方案2】:

    旧的 training = model.fit_generator(generator=train_generator, steps_per_epoch=2048 //36,epochs=10,validation_data=validation_generator,validation_steps=832//16)

    去掉'generator=' 新的 training = model.fit(train_generator, steps_per_epoch=2048 // 128,epochs=10,validation_data=validation_generator,validation_steps=832//16)

    【讨论】:

    • 这个答案提供了什么,而接受的答案却没有?
    • @Dragonthoughts 因为它是声明性的,而接受是必要的
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-24
    • 2020-08-20
    相关资源
    最近更新 更多