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:找到了无效的张量“输入”

ValueError:找到样本数量不一致的输入变量:[2839,14195]

ValueError:无法解释输入“State/UnionTerritory”

ValueError:无法处理未知和二进制的混合

ValueError:无法解释 seaborn 中的输入