Keras 为什么可以';我是否将图像数据拟合到模型中。在我的CNN中预测?

Keras 为什么可以';我是否将图像数据拟合到模型中。在我的CNN中预测?,keras,neural-network,runtime-error,conv-neural-network,cnn,Keras,Neural Network,Runtime Error,Conv Neural Network,Cnn,我已经建立并训练了我的CNN模型,我想对它进行测试。 我编写了一个脚本,从指定的目录路径接收输入图像,然后对图像进行预处理,并将像素值重新调整为0到1之间。我还将图像调整到正确的尺寸,并使用model.predict()进行预测。但是,当我运行代码时: from keras.models import Sequential from keras_preprocessing.image import * from keras.layers import * import tensorflow as

我已经建立并训练了我的CNN模型,我想对它进行测试。 我编写了一个脚本,从指定的目录路径接收输入图像,然后对图像进行预处理,并将像素值重新调整为0到1之间。我还将图像调整到正确的尺寸,并使用
model.predict()
进行预测。但是,当我运行代码时:

from keras.models import Sequential
from keras_preprocessing.image import *
from keras.layers import *
import tensorflow as tf
import numpy as np
from keras.layers.experimental.preprocessing import Rescaling
import os
import cv2
from keras.models import *

img_size = 250

#Load weights into new model
filepath = os.getcwd() + "/trained_model.h5"

model = load_model(filepath)
print("Loaded model from disk")

#Scales the pixel values to between 0 to 1
#datagen = ImageDataGenerator(rescale=1.0/255.0)

#Prepares Testing Data

testing_dataset = cv2.imread(os.getcwd() + "/cats and dogs images/single test sample/505.png")
#img = datagen.flow_from_directory(testing_dataset, target_size=(img_size,img_size))

img = cv2.resize(testing_dataset, (img_size,img_size))
newimg = np.asarray(img)
pixels = newimg.astype('float32')
pixels /= 255.0
print(pixels.shape)


model.predict(x=pixels)
弹出此错误:

Loaded model from disk
(250, 250, 3)
Traceback (most recent call last):
  File "C:\Users\Jackson\Documents\Programming\Python Projects\Neural Network That Deteremines Cats and Dogs\Test Trained Model.py", line 34, in <module>
    model.predict(x=pixels)
  File "C:\Users\Jackson\AppData\Local\Programs\Python\Python38\lib\site-packages\tensorflow\python\keras\engine\training.py", line 130, in _method_wrapper
    return method(self, *args, **kwargs)
  File "C:\Users\Jackson\AppData\Local\Programs\Python\Python38\lib\site-packages\tensorflow\python\keras\engine\training.py", line 1599, in predict
    tmp_batch_outputs = predict_function(iterator)
  File "C:\Users\Jackson\AppData\Local\Programs\Python\Python38\lib\site-packages\tensorflow\python\eager\def_function.py", line 780, in __call__
    result = self._call(*args, **kwds)
  File "C:\Users\Jackson\AppData\Local\Programs\Python\Python38\lib\site-packages\tensorflow\python\eager\def_function.py", line 823, in _call
    self._initialize(args, kwds, add_initializers_to=initializers)
  File "C:\Users\Jackson\AppData\Local\Programs\Python\Python38\lib\site-packages\tensorflow\python\eager\def_function.py", line 696, in _initialize
    self._stateful_fn._get_concrete_function_internal_garbage_collected(  # pylint: disable=protected-access
  File "C:\Users\Jackson\AppData\Local\Programs\Python\Python38\lib\site-packages\tensorflow\python\eager\function.py", line 2855, in _get_concrete_function_internal_garbage_collected
    graph_function, _, _ = self._maybe_define_function(args, kwargs)
  File "C:\Users\Jackson\AppData\Local\Programs\Python\Python38\lib\site-packages\tensorflow\python\eager\function.py", line 3213, in _maybe_define_function
    graph_function = self._create_graph_function(args, kwargs)
  File "C:\Users\Jackson\AppData\Local\Programs\Python\Python38\lib\site-packages\tensorflow\python\eager\function.py", line 3065, in _create_graph_function
    func_graph_module.func_graph_from_py_func(
  File "C:\Users\Jackson\AppData\Local\Programs\Python\Python38\lib\site-packages\tensorflow\python\framework\func_graph.py", line 986, in func_graph_from_py_func
    func_outputs = python_func(*func_args, **func_kwargs)
  File "C:\Users\Jackson\AppData\Local\Programs\Python\Python38\lib\site-packages\tensorflow\python\eager\def_function.py", line 600, in wrapped_fn
    return weak_wrapped_fn().__wrapped__(*args, **kwds)
  File "C:\Users\Jackson\AppData\Local\Programs\Python\Python38\lib\site-packages\tensorflow\python\framework\func_graph.py", line 973, in wrapper
    raise e.ag_error_metadata.to_exception(e)
ValueError: in user code:

    C:\Users\Jackson\AppData\Local\Programs\Python\Python38\lib\site-packages\tensorflow\python\keras\engine\training.py:1462 predict_function  *
        return step_function(self, iterator)
    C:\Users\Jackson\AppData\Local\Programs\Python\Python38\lib\site-packages\tensorflow\python\keras\engine\training.py:1452 step_function  **
        outputs = model.distribute_strategy.run(run_step, args=(data,))
    C:\Users\Jackson\AppData\Local\Programs\Python\Python38\lib\site-packages\tensorflow\python\distribute\distribute_lib.py:1211 run
        return self._extended.call_for_each_replica(fn, args=args, kwargs=kwargs)
    C:\Users\Jackson\AppData\Local\Programs\Python\Python38\lib\site-packages\tensorflow\python\distribute\distribute_lib.py:2585 call_for_each_replica
        return self._call_for_each_replica(fn, args, kwargs)
    C:\Users\Jackson\AppData\Local\Programs\Python\Python38\lib\site-packages\tensorflow\python\distribute\distribute_lib.py:2945 _call_for_each_replica
        return fn(*args, **kwargs)
    C:\Users\Jackson\AppData\Local\Programs\Python\Python38\lib\site-packages\tensorflow\python\keras\engine\training.py:1445 run_step  **
        outputs = model.predict_step(data)
    C:\Users\Jackson\AppData\Local\Programs\Python\Python38\lib\site-packages\tensorflow\python\keras\engine\training.py:1418 predict_step
        return self(x, training=False)
    C:\Users\Jackson\AppData\Local\Programs\Python\Python38\lib\site-packages\tensorflow\python\keras\engine\base_layer.py:975 __call__
        input_spec.assert_input_compatibility(self.input_spec, inputs,
    C:\Users\Jackson\AppData\Local\Programs\Python\Python38\lib\site-packages\tensorflow\python\keras\engine\input_spec.py:191 assert_input_compatibility
        raise ValueError('Input ' + str(input_index) + ' of layer ' +

    ValueError: Input 0 of layer sequential is incompatible with the layer: : expected min_ndim=4, found ndim=3. Full shape received: [None, 250, 3]
从磁盘加载模型
(250, 250, 3)
回溯(最近一次呼叫最后一次):
文件“C:\Users\Jackson\Documents\Programming\Python Projects\Neural Network That determines cat and Dogs\Test Trained Model.py”,第34行,在
模型预测(x=像素)
文件“C:\Users\Jackson\AppData\Local\Programs\Python\38\lib\site packages\tensorflow\Python\keras\engine\training.py”,第130行,在方法包装中
返回方法(self、*args、**kwargs)
文件“C:\Users\Jackson\AppData\Local\Programs\Python\38\lib\site packages\tensorflow\Python\keras\engine\training.py”,第1599行,在predict中
tmp_批处理_输出=预测_函数(迭代器)
文件“C:\Users\Jackson\AppData\Local\Programs\Python\38\lib\site packages\tensorflow\Python\eager\def_function.py”,第780行,在调用中__
结果=自身调用(*args,**kwds)
文件“C:\Users\Jackson\AppData\Local\Programs\Python38\lib\site packages\tensorflow\Python\eager\def\u function.py”,第823行,在调用中
self.\u初始化(参数、KWD、添加初始值设定项到=初始值设定项)
文件“C:\Users\Jackson\AppData\Local\Programs\Python\38\lib\site packages\tensorflow\Python\eager\def_function.py”,第696行,在_initialize中
self._stateful_fn._get_concrete_function_internal_garbage_collected(#pylint:disable=protected access
文件“C:\Users\Jackson\AppData\Local\Programs\Python\38\lib\site packages\tensorflow\Python\eager\function.py”,第2855行,位于“获取”\u具体\u函数\u内部\u垃圾收集”中
图函数,自我,可能定义函数(args,kwargs)
文件“C:\Users\Jackson\AppData\Local\Programs\Python\38\lib\site packages\tensorflow\Python\eager\function.py”,第3213行,在定义函数中
graph\u function=self.\u create\u graph\u function(args,kwargs)
文件“C:\Users\Jackson\AppData\Local\Programs\Python\38\lib\site packages\tensorflow\Python\eager\function.py”,第3065行,在创建图形函数中
func_graph_module.func_graph_from_py_func(
文件“C:\Users\Jackson\AppData\Local\Programs\Python\38\lib\site packages\tensorflow\Python\framework\func_graph.py”,第986行,位于_py_func的func_图中
func_outputs=python_func(*func_args,**func_kwargs)
文件“C:\Users\Jackson\AppData\Local\Programs\Python\38\lib\site packages\tensorflow\Python\eager\def_function.py”,第600行,包装为\u fn
返回弱_-wrapped_-fn()
文件“C:\Users\Jackson\AppData\Local\Programs\Python\38\lib\site packages\tensorflow\Python\framework\func\u graph.py”,第973行,在包装器中
将e.ag\u错误\u元数据引发到\u异常(e)
ValueError:在用户代码中:
C:\Users\Jackson\AppData\Local\Programs\Python38\lib\site packages\tensorflow\Python\keras\engine\training.py:1462 predict\u函数*
返回步骤_函数(self、迭代器)
C:\Users\Jackson\AppData\Local\Programs\Python38\lib\site packages\tensorflow\Python\keras\engine\training.py:1452 step\u函数**
输出=模型。分配策略。运行(运行步骤,参数=(数据,)
C:\Users\Jackson\AppData\Local\Programs\Python38\lib\site packages\tensorflow\Python\distribute\distribute\u lib.py:1211运行
返回self.\u扩展。为每个\u副本调用\u(fn,args=args,kwargs=kwargs)
C:\Users\Jackson\AppData\Local\Programs\Python38\lib\site packages\tensorflow\Python\distribute\distribute\u lib.py:2585为每个副本调用
返回自我。为每个副本(fn、ARG、kwargs)调用
C:\Users\Jackson\AppData\Local\Programs\Python38\lib\site packages\tensorflow\Python\distribute\distribute\distribute\u lib.py:2945\u为每个副本调用\u
返回fn(*args,**kwargs)
C:\Users\Jackson\AppData\Local\Programs\Python38\lib\site packages\tensorflow\Python\keras\engine\training.py:1445 run\u步骤**
输出=模型。预测步骤(数据)
C:\Users\Jackson\AppData\Local\Programs\Python38\lib\site packages\tensorflow\Python\keras\engine\training.py:1418
返回自我(x,训练=假)
C:\Users\Jackson\AppData\Local\Programs\Python38\lib\site packages\tensorflow\Python\keras\engine\base\u layer.py:975\u调用__
输入规格。断言输入规格兼容性(self.input规格,输入,
C:\Users\Jackson\AppData\Local\Programs\Python38\lib\site packages\tensorflow\Python\keras\engine\input\u spec.py:191断言\u输入\u兼容性
raise VALUERROR('Input'+str(Input_index)+'of layer'+
ValueError:层序列的输入0与层不兼容::预期的最小值ndim=4,找到的ndim=3。收到完整形状:[None,250,3]
我做错了什么,或者我只是错过了什么?
此外,我还尝试了
model.predict\u classes()
model.predict\u generator()的方法
但出现了相同的错误。

如果您在图像输入形状方面做的一切都是正确的,并且与模型所需的输入形状相匹配,那么模型很可能会收到一批大小为(250、250、3)的图像,因此,如果您有一个要在输入形状上测试的图像,则该图像的大小应为(12502503)这意味着您正在传递一批大小为1的图像

您的错误消息的意思是,模型需要4维的输入形状,并且传递了3维的输入形状,您需要包含批处理维度,因此我认为在图像规格化之后添加这一行应该可以工作

pixels = np.expand_dims(pixels, axis=0)
打印形状线时,像素形状应为(1250250,3)

正常