使用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
相关产品推荐
相关产品推荐

