ValueError:无法找到可以处理输入的数据适配器:<class 'NoneType'>,<class 'NoneType'> in keras model.predict
Posted
技术标签:
【中文标题】ValueError:无法找到可以处理输入的数据适配器:<class \'NoneType\'>,<class \'NoneType\'> in keras model.predict【英文标题】:ValueError: Failed to find data adapter that can handle input: <class 'NoneType'>, <class 'NoneType'> in keras model.predictValueError:无法找到可以处理输入的数据适配器:<class 'NoneType'>,<class 'NoneType'> in keras model.predict 【发布时间】:2020-08-14 03:35:18 【问题描述】:我在 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'>
任何帮助将不胜感激。
提前致谢
【问题讨论】:
由于这取决于从您的计算机读取文件,因此您的问题不符合 Reproducible 标准。您应该验证img
是 128x128 图像。如果你有 Spyder,你可以去变量资源管理器看看它是什么。其他选项是打印它或打印img.shape
。
我试过 img.shape。它没有用。然后我打印出img。它显示无
【参考方案1】:
您正在尝试在此行之后调整 img 数组的大小:
img = img_to_array(img)
您可能正在尝试使用 reshape 数组而不是 resize。如果要调整加载图像的大小,您可能需要在将其转换为数组之前执行此操作,即在此行之前:
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, 128,3)
print(img.shape)
model = load_model('hotdogs.h5')
model.summary()
abc = model.predict(img)
print(abc)
在这里,使用 reshape 将输入数组转换为模型所期望的 4 维数组。
我希望这会有所帮助。我是 *** 的新手。如果你觉得这个答案有帮助,如果你能给我一个赞成票,那将是一种激励。
【讨论】:
那行不通。它给出了形状错误。早些时候我没有形状错误。预测中只有一个。这意味着在将其变为数组之前确实不需要调整大小 如果您能提供您的模型文件和图像文件,那将非常有帮助,以便我可以复制和本地化代码并更好地帮助您。 好的,但是这里没有共享文件的选项 你可以上传到google drive并分享链接 好的,它是一个分类热狗而不是热狗的模型。这是drive.google.com/file/d/1MTnlmkVYKaDo8Jhee1mSK51vUy9Z2BIj/…的模型,你可以从互联网上获取任何热狗图片【参考方案2】:从 Tensorflow 导入 Keras 为我解决了这个问题。
from tensorflow.keras.preprocessing.image import load_img, img_to_array
from tensorflow.keras.models import load_model
【讨论】:
以上是关于ValueError:无法找到可以处理输入的数据适配器:<class 'NoneType'>,<class 'NoneType'> in keras model.predict的主要内容,如果未能解决你的问题,请参考以下文章
ValueError:无法找到可以处理输入的数据适配器:<class 'NoneType'>,<class 'NoneType'> in keras model.predict
ValueError:找到样本数量不一致的输入变量:[2839,14195]