keras 报错---`validation_steps=None` is only valid for a generator based on the `keras.utils.Sequence

ValueError: `validation_steps=None` is only valid for a generator based on the `keras.utils.Sequence` class. Please specify `validation_steps` or use the `keras.utils.Sequence` class.

提示validation_steps=None is only valid 

说明要赋值给validation_steps

history = model_vgg.fit_generator(
    train_generator,
    steps_per_epoch=1000,
    epochs=epochs,
    validation_data=validation_generator,
    validation_steps=200,  # 这一句不能省略,否则报错
    callbacks=[checkpointer]
)

 

同样,如果报如下的错误

ValueError: `steps_per_epoch=None` is only valid for a generator based on the `keras.utils.Sequence` class. Please specify `steps_per_epoch` or use the `keras.utils.Sequence` class.
根据提示,需要给steps_per_epoch给一个明确的值

 

下面有使用fit_generator的例子

from keras.preprocessing.image import ImageDataGenerator

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(
        train_generator,
        steps_per_epoch=2000,
        epochs=50,
        validation_data=validation_generator,
        validation_steps=800)

上面的例子来自keras中文社区文档

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
import tensorflow as tf from tensorflow.keras.preprocessing.image import ImageDataGenerator # 设置训练集和验证集的路径 train_dir = 'path/to/train/directory' validation_dir = 'path/to/validation/directory' # 定义数据生成器 train_datagen = ImageDataGenerator(rescale=1./255) validation_datagen = ImageDataGenerator(rescale=1./255) train_generator = train_datagen.flow_from_directory( train_dir, target_size=(150, 150), batch_size=32, class_mode='categorical') validation_generator = validation_datagen.flow_from_directory( validation_dir, target_size=(150, 150), batch_size=32, class_mode='categorical') # 构建卷积神经网络模型 model = tf.keras.models.Sequential([ tf.keras.layers.Conv2D(32, (3,3), activation='relu', input_shape=(150, 150, 3)), tf.keras.layers.MaxPooling2D(2, 2), tf.keras.layers.Conv2D(64, (3,3), activation='relu'), tf.keras.layers.MaxPooling2D(2,2), tf.keras.layers.Conv2D(128, (3,3), activation='relu'), tf.keras.layers.MaxPooling2D(2,2), tf.keras.layers.Conv2D(128, (3,3), activation='relu'), tf.keras.layers.MaxPooling2D(2,2), tf.keras.layers.Flatten(), tf.keras.layers.Dense(512, activation='relu'), tf.keras.layers.Dense(5, activation='softmax') ]) # 编译模型 model.compile(loss='categorical_crossentropy', optimizer=tf.keras.optimizers.RMSprop(lr=1e-4), metrics=['acc']) # 训练模型 history = model.fit( train_generator, steps_per_epoch=train_generator.samples/train_generator.batch_size, epochs=30, validation_data=validation_generator, validation_steps=validation_generator.samples/validation_generator.batch_size, verbose=2) # 保存模型 model.save('flower_classification.h5')给这个代码添加SeNet
06-13
好的,我来为你添加SeNet。 首先,导入必要的库: ```python import tensorflow as tf from tensorflow.keras.preprocessing.image import ImageDataGenerator from tensorflow.keras.layers import * from tensorflow.keras.models import Model ``` 然后,定义数据生成器: ```python train_datagen = ImageDataGenerator(rescale=1./255) validation_datagen = ImageDataGenerator(rescale=1./255) train_generator = train_datagen.flow_from_directory( train_dir, target_size=(150, 150), batch_size=32, class_mode='categorical') validation_generator = validation_datagen.flow_from_directory( validation_dir, target_size=(150, 150), batch_size=32, class_mode='categorical') ``` 接下来,我们定义SeNet模型: ```python def SENet(input_shape, classes): input_tensor = Input(shape=input_shape) x = Conv2D(64, (3,3), padding='same', activation='relu')(input_tensor) x = Conv2D(64, (3,3), padding='same', activation='relu')(x) x = Conv2D(128, (3,3), padding='same', activation='relu')(x) x = MaxPooling2D(pool_size=(2,2))(x) x = Conv2D(256, (3,3), padding='same', activation='relu')(x) x = Conv2D(256, (3,3), padding='same', activation='relu')(x) x = Conv2D(512, (3,3), padding='same', activation='relu')(x) x = GlobalAveragePooling2D()(x) x = Dense(512, activation='relu')(x) x = Dense(classes, activation='softmax')(x) model = Model(inputs=input_tensor, outputs=x) return model ``` 然后,我们为SeNet模型编译优化器和损失函数: ```python model = SENet(input_shape=(150,150,3), classes=5) model.compile(loss='categorical_crossentropy', optimizer=tf.keras.optimizers.RMSprop(lr=1e-4), metrics=['acc']) ``` 最后,我们训练模型,保存模型: ```python history = model.fit(train_generator, steps_per_epoch=train_generator.samples/train_generator.batch_size, epochs=30, validation_data=validation_generator, validation_steps=validation_generator.samples/validation_generator.batch_size, verbose=2) model.save('flower_classification_with_se.h5') ``` 这样,我们就成功地为这个代码添加了SeNet。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值