解决:TypeError: Value passed to parameter 'input' has DataType uint8 not in list of allowed values

本文解决在使用TensorFlow时遇到的TypeError,详细介绍了如何将uint8格式的图像数据转换为float32格式,以符合TensorFlow输入要求。通过使用cv2.resize()调整图像大小并结合tf.cast()进行数据类型转换,有效解决了问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

TypeError: Value passed to parameter ‘input’ has DataType uint8 not in list of allowed values: float16, bfloat16, float32, float64


网上给的解决方案很笼统,废话不多说,先直接贴代码

image.save("temp.jpg")
image = cv2.imread("temp.jpg")
res = cv2.resize(image, (150, 150), interpolation=cv2.INTER_CUBIC)
#上面这一行代码是numpy矩阵形式
res = res.reshape(1, 150, 150, 3)
res=tf.cast(res,tf.float32) #解决代码,tensor形式

分析一下问题
  • 报错的意思是你的矩阵是uint8格式,不在范围里,所以我们要做的是把格式转化成报错里说的float32等格式。
  • cv2.resize()后看别人博客上说出来的是uint格式的numpy数组
  • 所以我们要做的就是把cv2.resize()后的unit转化为float32,简单吧,但是这里牵扯到两个问题
    1. 我们tf.cast出来后数据结构是tensor,而不是numpy数组了
    2. tf1.5以后里面没有reshape函数
  • 所以要这么做,先reshape,因为这时候是numpy数组,而numpy是有reshape的。
说一下事情原委,以及个人的小疑问,也希望能有人帮我解惑
  1. 一开始我用朋友的服务器,因为他的服务器备案了,环境是python3.6.5,直接pip install了tensorflow,opencv-python,等没问题,直接跑。(注意numpy版本不能太高,16.0就行了)
  2. 我后来自己买了服务器和域名然后备案了,我俩都是阿里云的,我的是轻量级,他的是ECS。
  3. 一开始我也想按着之前的经验,没有想到各种报错,先是说没有OXX什么东西,反正意思是GCC版本低了?然后想把那个OXX升个级什么的,网上都说从python lib里复制过去,可是我的lib里版本也不高,后来灵机一动,何不安装个anaconda,好了这个报错解除。
  4. 一个大坑来了,nginx的配置,好家伙,我安装的是宝塔面板,里面四五个conf文件,怎么改都没用,后来好好看了看,绑定了域名的端口才可以的。
  5. 大坑又来了,之前python3.6跑的好好的代码,python3.7就各种出错,以及本文探讨的错误。

这几个问题欢迎大牛来解答!!!

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值