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

tf.keras训练MIT室内场景数据集时报Input size差2错误如何解决?

报错根因

你遇到的Input size should match (header_size + row_size * abs_height) but they differ by 2错误和模型结构、损失函数、尺寸调整逻辑完全无关,是MIT Indoor Scene数据集中存在少量文件损坏/后缀与实际格式不匹配/头信息错误的图片,image_dataset_from_directory底层调用的TensorFlow原生DecodeImage接口对异常文件兼容性极低,读到坏图就会直接抛出错误,跑几个batch才报错是因为坏图刚好混在后面的批次里。

修复步骤

1. 过滤/修复数据集中的损坏图片

运行以下脚本遍历所有数据集图片,自动识别并删除损坏文件,同时可以统一转换为RGB格式避免单通道灰度图后续报错:

import os
from pathlib import Path
from PIL import Image

# 替换为你自己的数据集路径
DATA_PATH = Path.cwd().joinpath('data', 'Images')
bad_files = []

# 遍历所有类别子目录
for class_dir in DATA_PATH.iterdir():
    if not class_dir.is_dir():
        continue
    # 遍历目录下所有图片文件
    for img_path in class_dir.glob('*.*'):
        try:
            # 验证图片完整性
            with Image.open(img_path) as img:
                img.verify()
            # 二次打开确认可正常转RGB,避免灰度/四通道图问题
            with Image.open(img_path) as img:
                img.convert('RGB')
        except Exception as e:
            bad_files.append(img_path)
            print(f"损坏文件:{img_path}, 错误信息:{str(e)}")

print(f"\n共识别到{len(bad_files)}个损坏文件,输入y确认删除:")
if input().strip().lower() == 'y':
    for f in bad_files:
        os.remove(f)
    print("所有损坏文件已删除")

2. 调整数据集加载参数

给image_dataset_from_directory补充color_mode='rgb'参数,强制读取为3通道图片,避免自动检测格式时输出单通道灰度图和模型输入不匹配:

train = tf.keras.utils.image_dataset_from_directory(
    DATA_PATH,
    validation_split=0.2,
    subset="training",
    labels="inferred",
    label_mode="categorical",
    color_mode="rgb", # 新增参数,强制输出3通道
    seed=123,
    image_size=(img_height, img_width),
    batch_size=batch_size
)

# 验证集的加载逻辑也要加相同的color_mode参数
valid = tf.keras.utils.image_dataset_from_directory(
    DATA_PATH,
    validation_split=0.2,
    subset="validation",
    labels="inferred",
    label_mode="categorical",
    color_mode="rgb",
    seed=123,
    image_size=(img_height, img_width),
    batch_size=batch_size
)

3. 删除冗余逻辑

你已经在image_dataset_from_directory中指定了image_size参数,框架会自动完成图片缩放,后续额外加的Resizing层调用完全冗余,可以直接删掉对应的map操作。

完成以上三步后重新运行训练代码即可解决该报错。

内容的提问来源于stack exchange,提问作者bhola prasad

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 17:54:05