如何使用Keras加载图片?解决load_img属性不存在报错
解决Keras加载图片报错:AttributeError: module 'keras.preprocessing.image' has no attribute 'load_img'
报错原因
这个错误是因为Keras版本更新后,load_img函数的位置被调整了——旧版本里它在keras.preprocessing.image模块下,新版本已经移至其他路径,也可以直接用PIL库替代。
三种解决办法
1. 改用TensorFlow Keras的官方路径(推荐)
如果你的代码基于TensorFlow集成的Keras(即tf.keras),直接修改导入和调用逻辑:
- 导入语句改为:
from tensorflow.keras.utils import load_img - 把原代码中的
img = image.load_img(img_path)替换成img = load_img(img_path)
2. 用PIL库直接加载图片
如果不想调整Keras相关导入,直接用PIL的Image.open替代,先确保安装Pillow(执行pip install pillow):
- 导入语句:
from PIL import Image - 替换加载代码:
img = Image.open(img_path)
3. 降级Keras到旧版本
如果非要保留原有代码结构,可以把Keras降级到2.8.x版本:
pip install keras==2.8.0
修改后的完整示例代码
from tensorflow.keras.utils import load_img from PIL import Image import numpy as np def predictImage(img_path='Normal2.jpg', arrayImg=None, printData=True): crops = [] if arrayImg is None: # 替换原load_img调用 img = load_img(img_path) crops = np.array(getCropImgs(img, needRotations=False), dtype=np.float16) crops /= 255.0 Image.fromarray(np.array(crops[2], dtype=np.uint8), "RGB").show() classes = ["亲和型", "接近型", "过度型", "正常型"] compProbs = [0, 0, 0, 0] for i in range(len(crops)): if printData: print(f"\n\n第{i + 1}个裁剪图预测结果:\n") _, probs = predict(crops[i], modelSavePath, showImg=False) for j in range(len(classes)): if printData: print(f"{classes[j]} : {round(probs[j], 4)}%") compProbs[j] += probs[j] if printData: print("\n\n所有裁剪图平均结果\n") for j in range(len(classes)): if printData: print(f"{classes[j]} : {round(compProbs[j] / len(crops), 4)}%")
注意事项
getCropImgs和predict是你自定义的函数,load_img和Image.open返回的都是PIL Image对象,和原代码兼容,无需修改这两个函数。
内容的提问来源于stack exchange,提问作者Frank_nganmo
相关产品推荐
相关产品推荐

