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

使用Keras进行图像分类时遭遇AttributeError报错的解决求助

解决Keras图像分类中AttributeError: 'str' object has no attribute '__array_interface__'的问题

从你的报错信息和代码来看,这个错误的核心原因是PIL的fromarray()方法被传入了字符串类型的图片路径,而不是预期的图像数组,这大概率和你修改过PIL的Image.py文件有关,也可能是依赖库版本的兼容性问题。下面是具体的解决方案:

1. 恢复修改过的PIL Image.py文件

你提到修改了Image.py,而报错里显示img = pil_image.fromarray(path)——这明显不符合逻辑,正常情况下load_img函数应该是用pil_image.open(path)来读取图片文件,而不是把路径直接传给fromarray()(这个方法是用来从数组生成图像的)。

  • 找到你的PIL安装路径(比如你这里是C:\Users\user\AppData\Local\Continuum\anaconda3\lib\site-packages\PIL\Image.py),将其恢复为原始版本:
    • 如果是用conda安装的,执行conda install --force-reinstall pillow强制重新安装Pillow,覆盖修改后的文件;
    • 如果是pip安装的,执行pip install --force-reinstall pillow。

2. 修正代码中的潜在疏漏

虽然这不是当前错误的直接原因,但你的代码里有一处明显的问题,可能后续引发其他报错:

  • 你使用了input_shape参数但未赋值,需要根据图像通道顺序补充定义:
    # 若使用默认的channels_last格式(TensorFlow后端)
    input_shape = (img_width, img_height, 3)
    # 若使用channels_first格式(Theano后端)
    # input_shape = (3, img_width, img_height)
    

3. 升级相关依赖库

如果恢复Image.py后问题仍然存在,可能是Keras或keras-preprocessing的版本兼容性问题:

  • 升级Keras:pip install --upgrade keras
  • 升级keras-preprocessing:pip install --upgrade keras-preprocessing

4. 验证数据集目录结构

最后再确认一下数据集路径的结构是否符合flow_from_directory的要求:

  • 确保train_dir和validation_dir下存在对应类别的子目录,比如train目录下要有cats和dogs两个子文件夹,每个子文件夹内存放对应类别的图片;
  • 你已经用原始字符串(r'...')处理路径,这部分是正确的,不用调整。

按照上面的步骤逐一排查,应该能解决这个错误。

内容的提问来源于stack exchange,提问作者Vipul Khandelwal

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 07:57:22