web-dev-qa-db-ja.com

tf.int64をtf.float32に変換する方法は?

私は試した:

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)'
22
Yee Liu

おっと、APIに関数が見つかりました...

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

通常は次を使用してキャストできます。

tf.cast(my_tensor, tf.float32)

Tf.float32を目的のタイプに置き換えます。


編集:少なくとも現時点では、tf.castは、符号なしのdtypeにキャストしません(例:tf.uint8)。これを回避するには、署名された同等のものに使用し、tf.bitcastすべてを取得します。例えば.

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

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)

imagetypeキャスト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

タイプをキャストし、値の範囲を保持するだけの場合は、@ stackoverflowuser2010および@Mark McDonaldが回答としてtf.castまたはtf.to_floatを使用します

1
Roby