如何将tf.int64转换为tf.float32?

时间:2016-02-24 08:13:18

标签: tensorflow int64

我试过了:

test_image = tf.convert_to_tensor(img, dtype=tf.float32)

然后出现以下错误:

ValueError: Tensor conversion requested dtype float32 for Tensor with dtype int64: 'Tensor("test/ArgMax:0", shape=TensorShape([Dimension(None)]), dtype=int64)'

5 个答案:

答案 0 :(得分:33)

您可以使用以下方式进行投射:

tf.cast(my_tensor, tf.float32)

将tf.float32替换为您想要的类型。

修改:至少目前看来,tf.cast无法投放到无符号的dtype(例如tf.uint8)。要解决此问题,您可以转换为已签名的等效项,并使用tf.bitcast来获取所有权限。 e.g。

tf.bitcast(tf.cast(my_tensor, tf.int8), tf.uint8)

答案 1 :(得分:12)

哎呀,我在API中找到了这个函数......

 tf.to_float(x, name='ToFloat')

答案 2 :(得分:5)

您可以使用tf.cast(x, tf.float32)tf.to_float(x),两者都转换为float32。

示例:

sess = tf.Session()

# Create an integer tensor.
tensor = tf.convert_to_tensor(np.array([0, 1, 2, 3, 4]), dtype=tf.int64)
sess.run(tensor)
# array([0, 1, 2, 3, 4])

# Use tf.cast()
tensor_float = tf.cast(tensor, tf.float32)
sess.run(tensor_float)
# array([ 0.,  1.,  2.,  3.,  4.], dtype=float32)

# Use tf.to_float() to cast to float32
tensor_float = tf.to_float(tensor)
sess.run(tensor_float)
# array([ 0.,  1.,  2.,  3.,  4.], dtype=float32)

答案 3 :(得分:1)

image类型转换,可以使用tf.image.convert_image_dtype()将图像范围[0 255]转换为[0 1]

img_uint8 = tf.constant([1,2,3], dtype=tf.uint8)
img_float = tf.image.convert_image_dtype(img_uint8, dtype=tf.float32)
with tf.Session() as sess:
    _img= sess.run([img_float])
    print(_img, _img.dtype)

输出:

[0.00392157 0.00784314 0.01176471] float32

如果您只想强制转换类型并保留值范围,请使用tf.casttf.to_float作为@ stackoverflowuser2010和@Mark McDonald回答

答案 4 :(得分:0)

如果您的数据实际上是 Pandas 数据框,我们可以先使用以下方法检查数据类型:

print(dataset.dtypes)

要将所有条目投射到float32中(例如),

# Typecast
dataset = dataset.astype('float32')

#print them to verify
print(dataset.dtypes)