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

Colab中用AlexNet+HDF5数据集做猫狗分类遇Empty logs错误求助

解决Keras训练时ValueError: Unexpected result of train_function (Empty logs)问题

以下是针对你使用AlexNet+HDF5DatasetGenerator进行猫狗图像分类时遇到的报错的具体排查和解决步骤:

1. 验证HDF5数据集的有效性

首先确认你的HDF5文件是否包含有效数据:

import h5py

# 检查训练集
with h5py.File('/content/train.hdf5', 'r') as f:
    print("训练集HDF5结构:", list(f.keys()))
    print("训练集图像形状:", f['images'].shape)
    print("训练集标签形状:", f['labels'].shape)

# 检查验证集
with h5py.File('/content/val.hdf5', 'r') as f:
    print("验证集HDF5结构:", list(f.keys()))
    print("验证集图像形状:", f['images'].shape)
    print("验证集标签形状:", f['labels'].shape)
  • 确保images和labels字段存在,且形状匹配(图像数量与标签数量一致),且数量大于0。
  • 如果文件为空或字段缺失,重新生成正确的HDF5数据集。

2. 测试HDF5DatasetGenerator的输出

手动调用生成器,确认它能返回有效的批次数据:

train_gen = trainGen.generator()
try:
    batch_x, batch_y = next(train_gen)
    print("训练批次图像形状:", batch_x.shape)
    print("训练批次标签形状:", batch_y.shape)
except StopIteration:
    print("生成器没有返回任何数据")
  • 如果抛出StopIteration或返回空数据,说明生成器的generator()方法实现存在问题,比如索引错误、数据读取逻辑错误。
  • 检查HDF5DatasetGenerator类的代码,确保它正确循环读取HDF5中的数据,且没有在预处理前过滤掉所有数据。

3. 排查预处理链的问题

单独测试每个预处理步骤,确认它们不会导致数据丢失或形状异常:

# 从HDF5中读取一张测试图像
with h5py.File('/content/train.hdf5', 'r') as f:
    test_img = f['images'][0]

# 依次测试预处理
processed = pp.preprocess(test_img)
print("PatchPreprocessor处理后形状:", processed.shape)

processed = mp.preprocess(processed)
print("MeanPreprocessor处理后形状:", processed.shape)

processed = iap.preprocess(processed)
print("ImageToArrayPreprocessor处理后形状:", processed.shape)
  • 确保每一步处理后的数据形状符合预期(最终应为(227, 227, 3))。
  • 如果某一步返回空或形状错误,检查对应预处理类的preprocess方法实现。

4. 修正训练参数计算

确认steps_per_epoch和validation_steps的计算是否合理:

print("训练集总图像数:", trainGen.numImages)
print("计算的steps_per_epoch:", trainGen.numImages // 128)
print("验证集总图像数:", valGen.numImages)
print("计算的validation_steps:", valGen.numImages // 128)
  • 如果steps_per_epoch为0,说明训练集图像数量小于batch_size(128),此时需要减小batch_size,或者确认HDF5中的数据数量是否正确。
  • 可以尝试将batch_size改为32或更小,重新测试。

5. 排除回调函数干扰

先注释掉TrainingMonitor回调,看训练是否能正常运行:

# 注释掉回调
# path = os.path.sep.join([OUTPUT_PATH, "{}.png".format(os.getpid())])
# callbacks = [TrainingMonitor(path)]

# 重新训练
model.fit_generator(
    trainGen.generator(),
    steps_per_epoch = trainGen.numImages // 128,
    validation_data = valGen.generator(),
    validation_steps = valGen.numImages // 128,
    epochs =1,
    max_queue_size = 10,
    verbose = 1
)
  • 如果注释后训练正常,说明TrainingMonitor回调存在问题,比如OUTPUT_PATH不存在、没有写入权限,或者回调内部逻辑错误导致训练中断。

6. 版本兼容性检查

在Colab中尝试升级TensorFlow和Keras到最新稳定版,避免版本bug:

!pip install --upgrade tensorflow keras

内容的提问来源于stack exchange,提问作者Ibrahim Oussama benhabi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 13:47:52