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)'
Oups, je trouve la fonction dans l'API ...
tf.to_float(x, name='ToFloat')
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)
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)
image
type 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