web-dev-qa-db-fra.com

Comment convertir tf.int64 en tf.float32?

J'ai essayé:

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

Puis l'erreur suivante apparaît:

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

Oups, je trouve la fonction dans l'API ...

 tf.to_float(x, name='ToFloat')
12
Yee Liu

Vous pouvez lancer généralement en utilisant:

tf.cast(my_tensor, tf.float32)

Remplacez tf.float32 par le type souhaité.


Edit: Il semble au moins pour le moment que tf.cast ne transtypera pas vers un type non signé (par exemple, tf.uint8). Pour contourner ce problème, vous pouvez transtyper vers l'équivalent signé et utiliser tf.bitcast pour aller jusqu'au bout. par exemple.

tf.bitcast(tf.cast(my_tensor, tf.int8), tf.uint8)
34
Mark McDonald

Vous pouvez utiliser soit tf.cast(x, tf.float32) ou tf.to_float(x) , les deux étant convertis en float32.

Exemple:

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

imagetype cast, vous pouvez utiliser tf.image.convert_image_dtype() qui convertit la plage d'images [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)

sortie:

[0.00392157 0.00784314 0.01176471] float32

si vous souhaitez uniquement transtyper et conserver la plage de valeurs, utilisez tf.cast ou tf.to_float comme @ stackoverflowuser2010 et @Mark McDonald ont répondu

1
Roby