You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Keras训练CNN时出现“输入数据耗尽”警告及部分轮次损失/准确率为0的问题求助

Keras训练CNN时出现“输入数据耗尽”警告及部分轮次损失/准确率为0的问题求助

大家好,我最近在用Keras训练CNN模型时碰到了一个棘手的问题,想请各位帮忙分析一下。

我用ImageDataGenerator处理数据集,训练集一共有1500张图片,设置的batch size是32,所以计算出来的steps_per_epoch是⌈1500/32⌉=47(最后一个批次是不完整的),通过flow_from_directory()方法加载图片。但训练开始后,部分epoch直接显示损失和准确率为0,还弹出了“输入数据耗尽”的警告,训练也被中断,具体警告如下:

UserWarning: Your input ran out of data; interrupting training. Make sure that your dataset or generator can generate at least steps_per_epoch * epochs batches. You may need to use the .repeat() function when building your dataset.
self.gen.throw(typ, value, traceback)

以下是我的完整代码:

train_datagen = ImageDataGenerator(rescale=1./255)
valid_datagen = ImageDataGenerator(rescale=1./255)

# 从目录导入数据并转换为批次
train_data = train_datagen.flow_from_directory(train_path,
                                           batch_size=32,
                                           target_size=(224, 224),
                                           class_mode="binary")

valid_data = valid_datagen.flow_from_directory(test_path,
                                           batch_size=32,
                                           target_size=(224, 224),
                                           class_mode="binary")

tf.random.set_seed(42)

model_1 = tf.keras.models.Sequential([
   Input(shape=(224, 224, 3)),
   Conv2D(filters=10,
     kernel_size=3,
     strides=1,
     padding='valid',
     activation='relu'),
   Conv2D(10, 3, activation='relu'),
   Conv2D(10, 3, activation='relu'),
   Flatten(),
   Dense(1, activation='sigmoid')
])

model_1.compile(loss="binary_crossentropy",
            optimizer=tf.keras.optimizers.Adam(),
            metrics=["accuracy"])

history_1 = model_1.fit(train_data,
                    epochs=5,
                    steps_per_epoch=len(train_data),
                    validation_data=valid_data,
                    validation_steps=len(valid_data))

训练的输出日志如下:

Epoch 1/5
/usr/local/lib/python3.11/dist-packages/keras/src/trainers/data_adapters/py_dataset_adapter.py:122: UserWarning: Your `PyDataset` class should call `super().__init__(**kwargs)` in its constructor. `**kwargs` can include `workers`, `use_multiprocessing`, `max_queue_size`. Do not pass these arguments to `fit()`, as they will be ignored.
  self._warn_if_super_not_called()

47/47 ━━━━━━━━━━━━━━━━━━━━ 767s 14s/step - accuracy: 0.6488 - loss: 0.6197 - val_accuracy: 0.7620 - val_loss: 0.4793

Epoch 2/5
47/47 ━━━━━━━━━━━━━━━━━━━━ 0s 426us/step - accuracy: 0.0000e+00 - loss: 0.0000e+00

Epoch 3/5
/usr/lib/python3.11/contextlib.py:158: UserWarning: Your input ran out of data; interrupting training. Make sure that your dataset or generator can generate at least `steps_per_epoch * epochs` batches. You may need to use the `.repeat()` function when building your dataset.
  self.gen.throw(typ, value, traceback)

47/47 ━━━━━━━━━━━━━━━━━━━━ 48s 224ms/step - accuracy: 0.8120 - loss: 0.4131 - val_accuracy: 0.8600 - val_loss: 0.3441

Epoch 4/5
47/47 ━━━━━━━━━━━━━━━━━━━━ 3s 54ms/step - accuracy: 0.0000e+00 - loss: 0.0000e+00

Epoch 5/5
47/47 ━━━━━━━━━━━━━━━━━━━━ 11s 219ms/step - accuracy: 0.8336 - loss: 0.3814 - val_accuracy: 0.8880 - val_loss: 0.3042

有没有大佬能帮我看看这是什么原因导致的?该怎么解决这个问题呢?

备注:内容来源于stack exchange,提问作者Hamza Azhar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.14 15:30:29