keras 值错误:Tensor(“输入:0”,形状=(无,256,256,3),数据类型=uint8)

qhhrdooz  于 2022-12-23  发布在  其他
关注(0)|答案(1)|浏览(113)

我不知道如何解决这个错误,我也尝试过将其转换为float 32

import cv2
import tensorflow as tf
import numpy as np

CATEGORIES = ["gas", "break","stop"]

model = tf.keras.models.load_model("trained")

def prepare(filepath):
    IMG_SIZE = 256  # 50 in txt-based
    img_array = cv2.imread(filepath)
    new_array = cv2.resize(img_array, (IMG_SIZE, IMG_SIZE))
    arr=new_array.reshape(-1, IMG_SIZE, IMG_SIZE, 3)
    return arr

x=prepare('img.jpg')
x = tf.keras.utils.normalize(x, axis=1)
x = x.astype('float32') 
print(x.dtype)
prediction = model.predict([x])
print(prediction)  # will be a list in a list.
print(CATEGORIES[np.argmax(prediction[0])])

float 32------------------------------------------------------------------------------------------值错误追溯(最近调用最后)in 11 x = x.astype('float 32')12打印(x.dtype)---〉13预测=模型.预测([x])14打印(预测)#将是列表中的列表。15打印(类别[np.argmax(预测[0])])
~\anaconda 3\envs\tf\lib\站点包\tensorflow_core\python\keras\engine\training.py在预测中(自身,x,批处理大小,详细,步骤,回调,最大队列大小,工作进程,使用多处理)1011
最大队列大小=最大队列大小,1012工作者=工作者,-〉1013使用多处理=使用多处理)1014 1015定义重置度量(自):
~\anaconda 3\envs\tf\lib\站点包\tensorflow 核心\python\keras\引擎\训练_v2.py在预测中(self,model,x,batch_size,verbose,步骤,回调,最大队列大小,worker,use_multiprocessing,*kwargs)496模型,模式键.PREDICT,x=x,批处理大小=批处理大小,verbose=详细,497步骤=步骤,回调=回调,最大队列大小=最大队列大小,--〉498工作进程=工作进程,使用多重处理=使用多重处理,kwargs)499 500
~\anaconda 3\envs\tf\lib\站点包\tensorflow 核心\python\keras\引擎\模型迭代中的培训版本2.py(自身、模型、模式、x、y、批处理大小、详细、样本权重、步骤、回调、最大队列大小、工作者、使用多处理、kwargs)473模式=模式,474训练上下文=训练上下文,--〉475总时期=1)476 cbks.make_logs(模型、epoch_logs、结果、模式)477
~\anaconda 3\envs\tf\lib\site-packages\tensorflow_core\python\keras\engine\training_v2.py在运行一个时期(模型、迭代器、执行函数、数据集大小、批处理大小、策略、每个时期的步骤数、样本数、模式、训练上下文、总时期数)126个步骤=步骤、模式=模式、大小=当前批处理大小)中作为批处理日志:127 try:--〉128 batch_outs =执行函数(迭代器)129除外(停止迭代,错误.超出范围错误):130 #待办事项(卡夫坦):关于tf函数和错误的文件错误。超出范围错误?
~\anaconda 3\envs\tf\lib\站点包\tensorflow 核心\python\keras\引擎\训练v2_实用工具.py在执行函数(输入fn)中96 #numpy将Tensor转换为“渴望”模式中的值。97返回nest.map结构(_非_无_常量_值,---〉98分布式函数(输入fn))99 100返回执行函数
~\anaconda 3\envs\tf\lib\站点包\tensorflow_core\python\eager\def_函数.py在
调用
(自身,参数,知识)566 xla_上下文中。退出()567否则:--〉568结果=自身.调用(
参数,kwds)569 570如果跟踪计数==自身.获取跟踪计数():
~\anaconda 3\envs\tf\lib\site-packages\tensorflow_core\python\eager\def_function.py in _call(self,*args,kwds)613 #这是call
的第一个调用,所以我们必须初始化。614初始化器= [] --〉615 self._initializers(args,kwds,add_initializers_to=初始化器)616最后:617 #此时,我们知道初始化已完成(或更少
~\anaconda 3\envs\tf\lib\站点包\tensorflow_core\python\eager\def_function.py in _initialize(自身,参数,知识,添加初始化程序到)495自身.具体有状态fn =(496自身.有状态fn.获取具体函数内部垃圾收集(

pylint:禁用=受保护访问

--〉497 * 参数,*kwds))498 499定义无效的创建者作用域( 未使用的参数,*未使用的kwds):
~\anaconda 3\envs\tf\lib\站点包\tensorflow_core\python\eager\函数. py在_get_concrete_function_internal_garbage_collected(自身,
参数,*kwargs)2387个参数,kwargs =无,无2388个带有自身的.lock:- 〉2389图形函数,,_ =自身。_可能定义函数(参数,字符)2390返回图形函数2391
~\anaconda 3\环境变量\tf\库\站点包\tensorflow 核心\python\eager\函数. py在可能定义函数(self,args,kwargs)中2701 2702
自身.函数缓存.未命中.添加(调用上下文键)-〉2703图形函数=自身.创建图形函数(参数,字符)2704自身.函数缓存.主要[缓存键] =图形函数2705返回图形函数,参数,字符
~\anaconda 3\envs\tf\lib\站点包\tensorflow 核心\python\eager\函数. py中的创建图形函数(自定义,参数,kwargs,覆盖平面参数形状)2591参数名称=参数名称,
2592 override_flat_arg_shape =override_flat_arg_shape,-〉2593按值捕获=self.按值捕获),2594 self._function_attributes,2595 #告诉ConcreteFunction在其图形超出
~\anaconda 3\envs\tf\lib\站点包\tensorflow 核心\python\框架\函数图.py位于函数图来源函数中(名称、python函数、参数、kwargs、签名、函数图、签名、签名选项、添加控制依赖项、参数名称、操作返回值、集合、按值捕获、覆盖扁平参数形状)976已转换函数)977 --〉978函数输出= python函数(
函数参数,**函数代码)979 980 #不变式:func_outputs仅包含Tensor、复合Tensor、

~\ anaconda3\envs\tf\lib\站点包\tensorflow 核心\python\eager\定义函数. py(位于wrapped_fn中)(* args,kwds)437 #wrapped允许AutoGraph换入转换后的函数。我们给438 #函数一个弱引用以避免循环引用。--〉439 return weak_wrapped_fn(). Package * 参数,kwds)440弱 Package fn =弱引用. ref( Package fn)441
~\ anaconda3\envs\tf\lib\站点包\tensorflow 核心\python\keras\引擎\培训v2实用程序. py,位于分布式函数中(输入迭代器)83个参数=准备馈送值(模型,输入_迭代器,模式,策略)84个输出=策略.实验_运行_v2(---〉85 per_replica_function,args = args)86 #超出PerReplica的输出减少或选取要返回的值。87 all_outputs = dist_utils. unwrap_output_dict(
~\anaconda3\envs\tf\lib\site-packages\tensorflow_core\python\distribute\distribute_lib.py in experimental_run_v2(self, fn, args, kwargs) 761 fn = autograph.tf_convert(fn, ag_ctx.control_status_ctx(), 762 convert_by_default=False) --> 763 return self._extended.call_for_each_replica(fn, args=args, kwargs=kwargs) 764 765 def reduce(self, reduce_op, value, axis):
~\ anaconda3\envs\tf\lib\站点包\tensorflow_core\python\distribute\distribute_lib. py在调用每个复制副本(self,fn,args,kwargs)1817中kwargs ={} 1818与self.容器策略(). scope():- 〉1819返回自身.调用每个副本(fn,参数,字符)1820 1821定义调用每个副本(自身,fn,参数,字符):
~\ anaconda3\环境变量\tf\库\站点包\tensorflow 核心\python\分发\分发库. py in_call_for_each_replica(self,fn,args,kwargs)2162
自身_容器_策略(),2163
同步组中的复制品ID =常量操作常量(0,dtypes.int32)):- 〉2164返回fn(
args,kwargs)2165 2166定义_reduce_to(自身,减少_操作,值,目标):
~\ anaconda3\envs\tf\lib\站点包\tensorflow_core\python\签名\实现\api.py在 Package 器中(
参数,kwargs)290定义 Package 器( 参数,kwargs):291具有ag_ctx.控制状态控制(状态= ag_ctx.状态.已禁用):- -〉292返回函数( 参数,kwargs)293 294如果检查. isfunction(函数)或检查. ismethod(函数):
~\ anaconda3\envs\tf\lib\site-packages\tensorflow_core\python\keras\engine\training_v2_utils. py in_predict_on_batch(*解析参数失败)210 dely,样本权重211 #注意x和batch_index已经是每个副本值。--〉212结果= predict_on_batch(模型,x)213如果batch_index为None:214返回结果
~\ anaconda3\envs\tf\lib\站点包\tensorflow 核心\python\keras\引擎\训练v2_实用工具. py在预测_on_批处理(模型,x,独立)554 555中,带有后端。渴望学习阶段作用域(0):- -〉556返回批处理fn(输入)的预测值#pylint:禁用=不可调用
~\ anaconda3\envs\tf\lib\站点包\tensorflow_core\python\keras\engine\基础层. py在
调用
(自身,输入,
参数,kwargs)776输出=基础层实用程序. mark_as_return(输出,acd)777其他:- -〉778输出= call_fn(cast_inputs, args,kwargs)779 780,错误除外。运算符不允许在图形中出现错误,如:
调用中的~\ anaconda3\envs\tf\lib\site-packages\tensorflow_core\python\keras\engine\sequential.py(自定义,输入,训练,掩码)279 kwargs ['训练']=训练280--〉281输出=层(输入,kwargs)282 283 #outputs将成为下一层的输入。
~\ anaconda3\envs\tf\lib\站点包\tensorflow_core\python\keras\engine\基础层. py在
调用
(自身,输入,
参数,kwargs)776输出=基础层实用程序. mark_as_return(输出,acd)777其他:- -〉778输出= call_fn(cast_inputs, args,kwargs)779 780,错误除外。运算符不允许在图形中出现错误,如:
~\ anaconda3\envs\tf\lib\site-packages\tensorflow_core\python\keras\saving\saved_model\utils.py中的返回输出和添加损耗(
参数,kwargs)57个输入=参数[输入参数索引] 58个参数=参数[输入参数索引+1:]---〉59个输出,损耗= fn(输入, 参数,kwargs)60层.添加损耗(损耗,输入)61个返回输出
~\ anaconda3\envs\tf\lib\站点包\tensorflow_core\python\eager\def_函数. py在
调用
(自身,参数,知识)566 xla_上下文中。退出()567否则:- -〉568结果=自身.调用(
参数,kwds)569 570如果跟踪计数==自身.获取跟踪计数():
~\ anaconda3\envs\tf\lib\site-packages\tensorflow_core\python\eager\def_function. py in_call(self,
args,kwds)604 #在这种情况下,我们没有在第一次调用时创建变量。所以我们可以605 #运行第一次跟踪,但如果创建了变量,我们将失败。--〉606 results = self._stateful_fn( args,kwds)607 if self._created_variables:608 raise ValueError("在非首次调用函数时创建变量"
~\ anaconda3\envs\tf\lib\site-packages\tensorflow_core\python\eager\function.py in
call
(self,
args,**kwargs)2360 """调用专用于输入的图形函数。""" 2361使用self._lock:- 〉2362图形函数,参数,kwargs = self.可能定义函数(参数,kwargs)2363返回图形函数.过滤调用(参数,kwargs)#pylint:禁用=受保护访问2364

~\ anaconda3\环境变量\tf\库\站点包\tensorflow 核心\python\eager\函数. py在可能定义函数(self,args,kwargs)中2701 2702
自身.函数缓存.未命中.添加(调用上下文键)-〉2703图形函数=自身.创建图形函数(参数,字符)2704自身.函数缓存.主要[缓存键]=图形函数2705返回图形函数,参数,字符
~\ anaconda3\envs\tf\lib\站点包\tensorflow 核心\python\eager\函数. py中的创建图形函数(自定义,参数,kwargs,覆盖平面参数形状)2591参数名称=参数名称,
2592 override_flat_arg_shape = override_flat_arg_shape,-〉2593按值捕获= self.按值捕获),2594 self._function_attributes,2595 #告诉ConcreteFunction在其图形超出
~\ anaconda3\envs\tf\lib\站点包\tensorflow 核心\python\框架\函数图. py位于函数图来源函数中(名称、python函数、参数、kwargs、签名、函数图、签名、签名选项、添加控制依赖项、参数名称、操作返回值、集合、按值捕获、覆盖扁平参数形状)976已转换函数)977--〉978函数输出= python函数(* 函数参数,*函数代码)979 980 #不变式:func_outputs仅包含Tensor、合成Tensor、
~\ anaconda3\envs\tf\lib\站点包\tensorflow 核心\python\eager\定义函数. py(位于wrapped_fn中)(
args,kwds)437 #wrapped允许AutoGraph换入转换后的函数。我们给438 #函数一个弱引用以避免循环引用。--〉439 return weak_wrapped_fn(). Package * 参数,*kwds)440弱 Package fn =弱引用. ref( Package fn)441
~\ anaconda3\envs\tf\lib\站点包\tensorflow_core\python\保存的模型\函数反序列化. py位于还原的函数体(
参数,kwargs)260.格式(漂亮格式位置(参数),kwargs,261长度(保存的函数.具体函数),--〉262 "\n\n".连接(签名描述))263 264具体函数对象=[]
ValueError:找不到要调用的匹配函数,该函数从
已保存模型。得到:位置参数(共1个):
Tensor("输入:0",形状=(无,256,256,3),数据类型= uint8)关键字参数:{}
这些参数应与以下1个选项之一匹配:
备选案文1:立场论点(共1个):
TensorSpec(形状=(无,256,256,3),数据类型= tf.float32,名称="输入")关键字参数:{}

wmvff8tz

wmvff8tz1#

我认为加载的模型期望的输入签名(形状和数据类型)与提供的输入签名不同。具体来说,加载的模型期望的是tensorflow数据类型(tf.float32),但您提供了float32。您能否尝试替换

x = x.astype('float32') # dtype of x is numpy float32 which is not what the loaded model expecting here

作者

x = tf.cast(x,tf.float32) # this makes x to be of correct signature

请检查下面每行中发生的情况

x=prepare('img.jpg')     # x is numpy array
# whenever you run a tensorflow operation on a numpy array, it becomes a tensor and vice versa
x = tf.keras.utils.normalize(x, axis=1)  # x becomes a tensor
x = x.astype('float32')  # dtype of x changed back to numpy float32
print(x.dtype)           # prints correctly float32 (notice that its not tf.float32)
prediction = model.predict([x]) # this throws an error as the underlying concrete function expects input of tf.float32 signature

我看没有其他问题,建议大家看一下concrete functioninput signature

相关问题