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

使用MobileNetV2做猫狗分类训练时出现Input is empty的InvalidArgumentError报错

错误原因

该错误产生于数据加载阶段,image_dataset_from_directory 读取图片时遇到了文件大小为0、内容损坏、后缀名伪装成图片的无效文件,图片解码节点因为输入为空直接抛出异常,和模型实现代码无关。

修复方案
  • 方案1:提前清理数据集中的无效文件,在加载数据集前运行以下代码:
import os
import PIL
from PIL import Image

dataset_dir = "dataset/PetImages/"
invalid_img_list = []

# 遍历两个类别的图片文件夹
for class_folder in ["Cat", "Dog"]:
    folder_path = os.path.join(dataset_dir, class_folder)
    for img_file in os.listdir(folder_path):
        img_path = os.path.join(folder_path, img_file)
        try:
            # 校验图片可正常打开
            img = Image.open(img_path)
            img.verify()
            # 额外校验文件非空
            if os.path.getsize(img_path) == 0:
                invalid_img_list.append(img_path)
        except (PIL.UnidentifiedImageError, IOError):
            invalid_img_list.append(img_path)

# 批量删除无效图片
for path in invalid_img_list:
    os.remove(path)
print(f"共清理无效图片{len(invalid_img_list)}张")
  • 方案2:(适配TensorFlow 2.10及以上版本)直接在数据集加载接口添加容错参数,加载时自动跳过损坏文件,无需提前清理:
    修改原代码中数据集加载部分,新增skip_on_error=True参数:
train_dataset = image_dataset_from_directory(directory,
                                             shuffle=True,
                                             batch_size=BATCH_SIZE,
                                             image_size=IMG_SIZE,
                                             validation_split=0.2,
                                             subset='training',
                                             seed=42,
                                             skip_on_error=True)
validation_dataset = image_dataset_from_directory(directory,
                                             shuffle=True,
                                             batch_size=BATCH_SIZE,
                                             image_size=IMG_SIZE,
                                             validation_split=0.2,
                                             subset='validation',
                                             seed=42,
                                             skip_on_error=True)
  • 可选优化:给验证集也添加prefetch配置,提升训练阶段的读取效率:
validation_dataset = validation_dataset.prefetch(buffer_size=AUTOTUNE)

完成上述修改后重新运行训练代码即可正常执行。

内容的提问来源于stack exchange,提问作者maryam gh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 09:18:02