Jupyter Notebook6.5.4
tensorflow 2.12.0
keras 2.12.0
原因:
查看image.py 源文件,并没有找到 load_img(), img_to_array() 两个方法,原因在于 keras 2.6 版本之后就发生了变化,类中的有些方法被迁移到其它地方或者被删除了。
但经过查找会发现这两个方法是 images_utils 的方法属性。
解决办法:
1、把keras和tensorflow版本降低,keras 2.3.1版本包含 load_img 函数。
pip install keras==2.3.1
2、使用 image_utils 的 load_img(), img_to_array() 两个方法即可。
from keras.utils import image_utils
import numpy as np
pic_dog='./catsdogs/dog.jpg'
pic_dog=image_utils.load_img(pic_dog,target_size=(50,50))
pic_dog=image_utils.array_to_img(pic_dog)
pic_dog=np.array(pic_dog)
pic_dog=pic_dog/255
pic_dog=pic_dog.reshape(1,50,50,3)
result_dog=model.predict(pic_dog)
print('Dog:',result_dog)
这里需要注意的是,使用image_utils加载图片,返回的对象是 PIL 图像对象,而不是Numpy数组,需要将PIL图像转换为Numpy数组,在旧版本的keras中是不用专门处理的,但新版本需要处理一下 ,引入numpy直接转换
解决方法:
import numpy as np
pic_dog=np.array(pic_dog)