新手对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))
程序速度就非常快了