tensor与数组之间的相互转换

新手对fensorflow不熟悉,一般会有这个错误,在运行程序时报错:

TypeError: The value of a feed cannot be a tf.Tensor object. Acceptable feed values include Python scalars, strings, lists, numpy ndarrays, or TensorHandles.For reference, the tensor object was Tensor("

code:

with open(r"F:\depth-face\test_depth_new.lst", "r") as f:
    for line in f.readlines():
        index = index + 1
        #print(index, line)
        line = line.replace('\n', '')
        depth = cv2.imread(line, -1)
        depth = depth[16:112, 8:104]
        #color = cv2.cvtColor(color, cv2.COLOR_BGR2RGB)
        #color = color / 127.5 - 1.
        #color = color.reshape((-1, 96, 96, 3))
        depth = (depth - 127.5) / 64.0 - 1.0
        depth = tf.concat([depth, depth, depth], -1)
        depth = tf.reshape(depth, (-1, 96, 96, 3),name=None)
        depth = tf.cast(depth, tf.float32)
        #print(depth.shape)
        depth = tf.Session().run(depth)
        #print(type(depth))
        embd1 = normalize(sess.run([embeddings], feed_dict={images_placeholder: depth})[0])
        embed_list.extend(embd1)

depth经过tf.reshape之后变成了tensor张量,在经过feed_dict时显示feed_dict不能喂入tensor类型,所以将tensor转换为数组,

 depth = tf.Session().run(depth)

这一句就实现了将tensor转换为数组。
另外将数组转换为tensor的方法:

img_tensor= tf.convert_to_tensor(img_numpy)

————————————————————————————————————————————
加更:上面的程序可以跑,但是即使用了CUDA速度也非常慢,仔细思考了一下,可以不使用tf将depth图片改为三通道,而是使用numpy进行操作:

depth = np.concatenate((depth,depth,depth),axis=0)
depth = depth.reshape((-1, 96, 96, 3))

程序速度就非常快了

参考链接

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一位不愿暴露自己的小可爱

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值