当前位置: 首页 > 知识库问答 >
问题:

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

须彭亮
2023-03-14

我不知道如何解决这个错误,我也试着把它转换成float32

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])])

Float32 --------------------------------------------------------------------------- ValueError Traceback(最近的调用最后)在11 x=x.astype(Float32)12 print(x.dtype)---

#######################################################################################################################################################

~\anaconda3\envs\tf\lib\site packages\tensorflow\u core\python\keras\engine\training\u v2。py in predict(self、model、x、批处理大小、冗余、步骤、回调、最大队列大小、worker、use\u多处理、**kwargs)496模型、ModeKeys。PREDICT,x=x,batch\u size=batch\u size,verbose=verbose,497步=steps,回调=callbacks,max\u queue\u size=max\u queue\u size--

~\anaconda3\envs\tf\lib\site packages\tensorflow\u core\python\keras\engine\training\u v2。py in_model_迭代(self,model,mode,x,y,batch_size,verbose,sample_weight,steps,callbacks,max_queue_size,workers,use_multiprocessing,**kwargs)473 mode=mode,474 training_context=training_context--

~\anaconda3\envs\tf\lib\site packages\tensorflow\u core\python\keras\engine\training\u v2。py以批处理日志的形式运行(模型、迭代器、执行函数、数据集大小、批处理大小、策略、每批处理的步数、样本数、模式、训练上下文、总记录)126步=步、模式=模式、大小=当前批处理大小:127 try:--

~\anaconda3\envs\tf\lib\site packages\tensorflow\u core\python\keras\engine\training\u v2\u utils。执行函数(输入函数)中的py 96#numpy以急切模式将张量转换为值。97回巢。映射结构(_非_无_常量_值---

~\anaconda3\envs\tf\lib\site packages\tensorflow\u core\python\eager\def\u函数。调用中的py(self,*args,**kwds)566 xla\u上下文。退出()567其他:--

~\anaconda3\envs\tf\lib\site-包\tensorflow_core\python\渴望\def_function.py在_call(自我,*args,**kwds)613#这是第一次调用,所以我们必须初始化。614初始化器 = [] --

~\anaconda3\envs\tf\lib\site packages\tensorflow\u core\python\eager\def\u函数。py in_initialize(self、args、kwds、add_initializer_to)495 self_concrete\u stateful\u fn=(496 self.\u stateful\u fn.\u get\u concrete\u function\u internal\u garbage\u collected(

--

~\anaconda3\envs\tf\lib\site-包\tensorflow_core\python\渴望\function.py在_get_concrete_function_internal_garbage_collected(自我,*args,**kwargs)2387 args,kwargs=无,无2388与自我。_lock:-

~\anaconda3\envs\tf\lib\site packages\tensorflow\u core\python\eager\function。py in_可能定义函数(self、args、kwargs)2701272
self_函数缓存。错过。添加(调用上下文键)-

~\anaconda3\envs\tf\lib\site packages\tensorflow\u core\python\eager\function。py在创建图形函数(self、args、kwargs、override\u flat\u arg\u shapes)2591 arg\u names=arg\u names,
2592 override\u flat\u arg\u shapes=override\u flat\u arg\u shapes-

~\anaconda3\envs\tf\lib\site-包\tensorflow_core\python\框架\func_graph.pyfunc_graph_from_py_func(名称,python_func,args,kwargs,签名,func_graph,签名,autograph_options,add_control_dependencies,arg_names,op_return_value,收藏,capture_by_value,override_flat_arg_shapes)976converted_func)977-

~\anaconda3\envs\tf\lib\site packages\tensorflow\u core\python\eager\def\u函数。py in wrapped#fn(*args,**kwds)437#wrapped允许在转换函数中交换签名。我们给438#函数本身一个弱引用,以避免引用循环--

~\anaconda3\envs\tf\lib\site packages\tensorflow\u core\python\keras\engine\training\u v2\u utils。分布式函数(输入迭代器)中的py 83 args=\u prepare\u feed\u值(模型、输入迭代器、模式、策略)84 outputs=strategy。实验运行v2(---

~\anaconda3\envs\tf\lib\site packages\tensorflow\u core\python\distribute\distribute\u lib。实验运行中的py(自我、fn、args、kwargs)761 fn=自记。tf_convert(fn,ag_ctx.control_status_ctx(),762 convert_by_default=False)--

~\anaconda3\envs\tf\lib\site-包\tensorflow_core\python\分发\distribute_lib.py在call_for_each_replica(自我,fn,args,kwargs)1817 kwargs={} 1818与自我。_container_strategy()。范围():-

~\anaconda3\envs\tf\lib\site packages\tensorflow\u core\python\distribute\distribute\u lib。为每个复制副本(self、fn、args、kwargs)调用py-in\u 2162
self_container\u strategy(),2163
同步组中的副本\u id\u=constant\u op.constant(0,dtypes.int32)):-

~\anaconda3\envs\tf\lib\site-包\tensorflow_core\python\autograph\impl\api.py在包装器(*args,**kwargs)290 def包装器(*args,**kwargs): 291与ag_ctx。ControlStatusCtx(状态=ag_ctx。状态。残疾):--

~\anaconda3\envs\tf\lib\site packages\tensorflow\u core\python\keras\engine\training\u v2\u utils。py in_predict_on_batch(解析参数失败)210 del y,sample_weights 211#注意,x和batch_索引已经是每个副本的值--

~\anaconda3\envs\tf\lib\site-包\tensorflow_core\python\keras\Engine\training_v2_utils.py在predict_on_batch(模型,x,独立)554 555与backend.eager_learning_phase_scope(0):-

~\anaconda3\envs\tf\lib\site packages\tensorflow\u core\python\keras\engine\base\u层。调用中的py(self、input、*args、**kwargs)776输出=基本层utils。标记为返回(输出,acd)777其他:--

~\anaconda3\envs\tf\lib\site packages\tensorflow\u core\python\keras\engine\sequential。呼叫中的py(自我、输入、训练、面具)279 kwargs[“训练”]=训练280--

~\anaconda3\envs\tf\lib\site packages\tensorflow\u core\python\keras\engine\base\u层。调用中的py(self、input、*args、**kwargs)776输出=基本层utils。标记为返回(输出,acd)777其他:--

~\anaconda3\envs\tf\lib\site packages\tensorflow\u core\python\keras\saving\saved\u model\utils。py返回值\输出\和\添加\损失(*args,**kwargs)57个输入=args[输入\ arg\索引]58个args=args[输入\ arg\索引1:]---

~\anaconda3\envs\tf\lib\site packages\tensorflow\u core\python\eager\def\u函数。调用中的py(self,*args,**kwds)566 xla\u上下文。退出()567其他:--

~\anaconda3\envs\tf\lib\site-包\tensorflow_core\python\渴望\def_function.py在_call(自我,*args,**kwds)604#在这种情况下,我们没有在第一次调用时创建变量。所以我们可以605#运行第一个跟踪,但是如果创建了变量,我们应该会失败。--

~\anaconda3\envs\tf\lib\site packages\tensorflow\u core\python\eager\function。py in call(self,*args,**kwargs)2360“调用专用于输入的图形函数。”“2361与自我_锁定:-

~\anaconda3\envs\tf\lib\site packages\tensorflow\u core\python\eager\function。py in_可能定义函数(self、args、kwargs)2701272
self_函数缓存。错过。添加(调用上下文键)-

~\anaconda3\envs\tf\lib\site packages\tensorflow\u core\python\eager\function。py在创建图形函数(self、args、kwargs、override\u flat\u arg\u shapes)2591 arg\u names=arg\u names,
2592 override\u flat\u arg\u shapes=override\u flat\u arg\u shapes-

~\anaconda3\envs\tf\lib\site-包\tensorflow_core\python\框架\func_graph.pyfunc_graph_from_py_func(名称,python_func,args,kwargs,签名,func_graph,签名,autograph_options,add_control_dependencies,arg_names,op_return_value,收藏,capture_by_value,override_flat_arg_shapes)976converted_func)977-

~\anaconda3\envs\tf\lib\site packages\tensorflow\u core\python\eager\def\u函数。py in wrapped#fn(*args,**kwds)437#wrapped允许在转换函数中交换签名。我们给438#函数本身一个弱引用,以避免引用循环--

~\anaconda3\envs\tf\lib\site-包\tensorflow_core\python\saved_model\function_deserialization.py在restored_function_body(*args,**kwargs)260。格式(_pretty_format_positional(args),kwargs,261 len(saved_function.concrete_functions),-

无法找到匹配的函数调用加载从

SavedModel.得到:位置参数(共1个):*张量(“输入: 0”,形状=(无,256, 256, 3),dtype=uint8)关键字参数:{}

这些参数应与以下1个选项之一匹配:

选项1:位置参数(共1个):*TensorSpec(形状=(无,256, 256, 3),dtype=tf.float32,名称='输入')关键字参数:{}

共有1个答案

充阳秋
2023-03-14

我认为加载的模型期望输入签名(形状和dtype)不同于提供的输入签名。具体地说,加载的模型期待的是tenstorflow dtype(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

我没有看到任何其他问题。我建议你阅读关于具体函数输入签名

 类似资料:
  • 我是新来的,所以任何帮助都是值得的,这段代码是我的教授给我的,当我问一个例子,我希望有一个工作模型。。。 读取数据 将行走状态定义为0,运行状态定义为1 随机选取50%的数据作为测试数据,其余数据作为列车数据 使用skLearning选择50%的功能 应用支持向量机算法 回溯(最近一次调用):文件“”,第1行,在execfile exec(compile(f.read)()第89行的文件“C:\U

  • 问题内容: 我是TensorFlow和机器学习的新手。我正在尝试将两个对象归类为杯子和Pendrive(jpeg图像)。我已经成功训练并导出了model.ckpt。现在,我正在尝试恢复保存的model.ckpt以进行预测。这是脚本: 当我运行上述脚本进行预测时,出现以下错误: 我究竟做错了什么?以及如何修复numpy数组的形状? 问题答案: 形状为。 您的输入占位符的形状为。 问题是您要为占位符提

  • TensorFlow用张量这种数据结构来表示所有的数据.你可以把一个张量想象成一个n维的数组或列表.一个张量有一个静态类型和动态类型的维数.张量可以在图中的节点之间流通. 阶 在TensorFlow系统中,张量的维数来被描述为阶.但是张量的阶和矩阵的阶并不是同一个概念.张量的阶(有时是关于如顺序或度数或者是n维)是张量维数的一个数量描述.比如,下面的张量(使用Python中list定义的)就是2阶

  • 我正在尝试实现tensorflow回归模型,我的数据形状是train_X=(200,4)和train_Y=(200,)。我得到的形状错误,这是我的一段代码,请任何人都能提到我在哪里做错了。 df=pd。读取\u csv('all.csv') df=df。下降(“时间”,轴=1) 打印(df.descripe())#以了解数据集 列车Y=df[“功率”] 列车X=df。下降('功率',轴=1) 列车

  • 问题内容: 我在Ubuntu 18上在numpy中分配大型数组时遇到了一个问题,而在MacOS上却没有遇到同样的问题。 我想一个numpy的阵列形状分配内存 使用 当我在Ubuntu OS上遇到错误时 我在MacOS上没有得到它: 我读过某处不应该真正分配数组所需的全部内存,而只分配了非零元素。即使Ubuntu计算机具有64gb的内存,而我的MacBook Pro却只有16gb。 版本: PS:在

  • 问题内容: 我有一个列表,说temp_list具有以下属性: 现在,当我转换为numpy数组时, 我收到错误消息: 有人可以帮我吗? 问题答案: 列表中至少有一项不是三维的,或者其第二维或第三维与其他元素不匹配。如果仅第一维不匹配,则数组仍然匹配,但是作为单独的对象,不会尝试将它们协调为新的(四维)数组。下面是一些示例: 也就是说,冒犯元件的, 或(与是非负整数)。 那就是给你错误的原因。 您需要