tensorflow - ¿Cómo convertir tf.int64 a tf.float32?
(4)
Lo intenté:
test_image = tf.convert_to_tensor(img, dtype=tf.float32)
Luego aparece el siguiente error:
ValueError: Tensor conversion requested dtype float32 for Tensor with dtype int64: ''Tensor("test/ArgMax:0", shape=TensorShape([Dimension(None)]), dtype=int64)''
Puede usar tf.cast(x, tf.float32)
o tf.to_float(x)
, ambos de los cuales se convierten a float32.
Ejemplo:
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)
Puedes lanzar generalmente usando:
tf.cast(my_tensor, tf.float32)
Reemplace tf.float32 con su tipo deseado.
Edición : Parece que al menos por el momento, tf.cast
no se convertirá en un dtype sin firma (por ejemplo, tf.uint8
). Para tf.bitcast
esto, puede convertir al equivalente firmado y usar tf.bitcast
para obtener todo el camino. p.ej
tf.bitcast(tf.cast(my_tensor, tf.int8), tf.uint8)
Vaya, encuentro la función en la API ...
tf.to_float(x, name=''ToFloat'')
tipo de image
emitida puede usar tf.image.convert_image_dtype()
que convierte el rango de imagen [0 255]
a [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)
salida:
[0.00392157 0.00784314 0.01176471] float32
si solo desea emitir tipo y mantener el rango de valores, utilice tf.cast
o tf.to_float
como tf.to_float
@ user2010 y @Mark McDonald