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

使用AutoKeras图像分类器训练图片报AttributeError错误如何解决

问题排查与修复方案

核心错误原因

你当前的代码存在3个核心问题,最终导致输入不符合AutoKeras ImageClassifier的要求,触发属性错误:

  • os.listdir()仅返回目标路径下的文件名字符串列表,没有实际加载图片的像素数据,直接将字符串数组喂给图像分类器无法识别
  • 没有传入训练对应的标签数据,AutoKeras的监督训练接口必须同时传入图像特征和对应标签两个参数
  • 生成的训练集x格式错误,图像分类要求输入的格式为(样本数量, 图像高度, 图像宽度, 通道数),你当前生成的x形状为(1, 训练集样本数),完全不符合输入规范

修复后可运行代码

import autokeras as ak
import os
import numpy as np
from PIL import Image
from sklearn.model_selection import train_test_split

# 配置参数
path = '/Users/Downloads/business_cards/Canon/'
img_height = 224
img_width = 224
# 单分类任务示例,当前文件夹下所有图片都属于类别0,多分类请自行修改标签生成逻辑
label = 0

# 1. 加载并预处理图片数据
X_data = []
y_data = []
for img_name in os.listdir(path):
    # 过滤非图片文件,避免读取到隐藏文件等异常
    if img_name.lower().endswith(('.png', '.jpg', '.jpeg', '.bmp')):
        img_path = os.path.join(path, img_name)
        # 加载图片并统一尺寸
        img = Image.open(img_path).resize((img_height, img_width))
        img_arr = np.array(img)
        # 过滤读取失败的异常图片
        if img_arr is not None:
            X_data.append(img_arr)
            y_data.append(label)

# 2. 拆分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(np.array(X_data), np.array(y_data), test_size=0.2, random_state=42)

# 3. 训练模型
clf = ak.ImageClassifier(overwrite=True, max_trials=1)
clf.fit(X_train, y_train, epochs=1)

额外注意事项

  • 如果是多分类任务,需要按照自己的分类规则给不同类别的图片分配对应的标签值,不要全部填0
  • 如果输入是单通道灰度图,加载后需要手动扩展维度,满足(高度,宽度,1)的格式要求
  • 可以提前打印X_train.shape确认输入格式符合要求后再喂给模型,正常格式应为(样本数, 224, 224, 3)类的结构

内容的提问来源于stack exchange,提问作者swetha sreedhar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 03:15:03