如何解决ValueError:无法找到可处理输入的数据适配器:keras模型中的<class'NoneType'>,<class'NoneType'>
我已经在Keras中制作了一个CNN模型,并将其保存为“ model.h5”。输入形状为128x128。现在,我在一个新文件中,正在尝试使用此模型进行预测。这是到目前为止我所做的:
import keras
from keras.preprocessing.image import load_img,img_to_array
from keras.models import load_model
import PIL
img = load_img("img.jpg")
img = img_to_array(img)
img = img.resize((128,128))
model = load_model('model.h5')
model.summary()
abc = model.predict(img)
print(abc)
这是我的错误:
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-3-e23dbdb3fe22> in <module>()
14 model.summary()
15
---> 16 abc = model.predict(img)
17
18 print(abc)
3 frames
/usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/engine/data_adapter.py in select_data_adapter(x,y)
969 "Failed to find data adapter that can handle "
970 "input: {},{}".format(
--> 971 _type_name(x),_type_name(y)))
972 elif len(adapter_cls) > 1:
973 raise RuntimeError(
ValueError: Failed to find data adapter that can handle input: <class 'NoneType'>,<class 'NoneType'>
任何帮助将不胜感激。
预先感谢
解决方法
您要在此行之后调整img数组的大小:
img = img_to_array(img)
您可能正在尝试使用调整数组形状而不是使用调整大小。如果要调整已加载图像的大小,则可能需要先将其转换为数组,即在此行之前:
img = img_to_array(img)
更新:
您正在尝试在用于图像对象的数组上使用调整大小功能。因此,它返回NoneType,这又导致了问题。
另一件事是您的模型期望输入一个4维向量(使用您提供的文件进行检查)作为输入,并且将其传递给NoneType,如果您希望将PIL的调整大小功能调整为128, * 128,它仍将是一个二维向量,因此在使用reshape而不是resize时会出现错误。
您可以通过以下更改使代码工作:
img = load_img("img.jpg")
img = img.resize((128,128))
img = img_to_array(img)
img = img.reshape( -1,128,3)
print(img.shape)
model = load_model('hotdogs.h5')
model.summary()
abc = model.predict(img)
print(abc)
在这里,使用整形将输入数组转换为模型期望的4维数组。
我希望这会有所帮助。我是StackOverflow的新手。如果您认为这个答案有用,那么如果您可以给我一个投票,那将是很有动力的。
,从 Tensorflow 导入 Keras 为我解决了这个问题。
from tensorflow.keras.preprocessing.image import load_img,img_to_array
from tensorflow.keras.models import load_model
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。