[API] Tensorflow Convert to Tensor - Casting
(텐서플로우 텐서 변환 - 형변환)
참고: Tensor
를 인자로 받는 함수들은, tf.convert_to_tensor
의 인자가 될 수 있는 것들 또한 인자로 받을 수 있습니다.
형변환 (Casting)
TensorFlow는 그래프에 사용되는 텐서 자료형들을 형변환(cast)할 수 있는 몇 가지 함수를 제공합니다.
tf.string_to_number(string_tensor, out_type=None, name=None)
입력 텐서의 각 문자열(string)을 지정된 자료형의 값으로 변환합니다.
(참고로, int32 오버플로우는 에러를 내며, float 오버플로우는 반올림한 결과를 냅니다.)
인자:
string_tensor
:string
형Tensor
.out_type
:tf.DType
오브젝트.tf.float32
또는tf.int32
이어야 하며, 기본값은tf.float32
입니다. 이 자료형으로string_tensor
의 문자열이 변환됩니다. (선택사항)name
: 오퍼레이션의 명칭. (선택사항)
반환값:
out_type
형의 Tensor
. 출력 텐서는 입력 텐서 string_tensor
와 같은 구조(shape)를 가집니다.
출처: 텐서 변환
Tensorflow tf.string_to_number 결과
In [1]: import tensorflow as tf
tf.to_double(x, name='ToDouble')
텐서를 float64
형으로 변환합니다.
인자:
x
:Tensor
또는SparseTensor
.name
: 오퍼레이션의 명칭. (선택사항)
반환값:
x
와 구조(shape)가 같은 float64
형의 Tensor
또는 SparseTensor
.
예외:
TypeError
:x
가float64
형으로 변환될 수 없는 경우.
출처: 텐서 변환
Tensorflow tf.to_double 결과
In [1]: import tensorflow as tf
In [2]: import tfutil
In [3]: const1 = tf.constant(1)
In [4]: tfutil.print_constant(const1)
1
In [5]: print(const1)
Tensor("Const:0", shape=(), dtype=int32)
In [6]: double1 = tf.to_double(const1)
In [7]: tfutil.print_operation_value(double1)
1.0
In [8]: print(double1)
Tensor("ToDouble:0", shape=(), dtype=float64)
In [9]: const2 = tf.constant([2, 3])
In [10]:tfutil.print_constant(const2)
[2 3]
In [11]: print(const2)
Tensor("Const_1:0", shape=(2,), dtype=int32)
In [12]: double2 = tf.to_double(const2)
In [13]: tfutil.print_operation_value(double2)
[ 2. 3.]
In [14]: print(double2)
Tensor("ToDouble_1:0", shape=(2,), dtype=float64)
tf.to_float(x, name='ToFloat')
텐서를 float32
형으로 변환합니다.
인자:
x
:Tensor
또는SparseTensor
.name
: 오퍼레이션의 명칭. (선택사항)
반환값:
x
와 구조(shape)가 같은 float32
형의 Tensor
또는 SparseTensor
.
예외:
TypeError
:x
가float32
형으로 변환될 수 없는 경우.
출처: 텐서 변환
Tensorflow tf.to_float 결과
In [1]: import tensorflow as tf
In [2]: import tfutil
In [3]: const1 = tf.constant(1)
In [4]: tfutil.print_constant(const1)
1
In [5]: print(const1)
Tensor("Const:0", shape=(), dtype=int32)
In [6]: float1 = tf.to_float(const1)
In [7]: tfutil.print_operation_value(float1)
1.0
In [8]: print(float1)
Tensor("ToFloat:0", shape=(), dtype=float32)
In [9]: const2 = tf.constant([2, 3])
In [10]: tfutil.print_constant(const2)
[2 3]
In [11]: print(const2)
Tensor("Const_1:0", shape=(2,), dtype=int32)
In [12]: float2 = tf.to_float(const2)
In [13]: tfutil.print_operation_value(float2)
[ 2. 3.]
In [14]: print(float2)
Tensor("ToFloat_1:0", shape=(2,), dtype=float32)
tf.to_bfloat16(x, name='ToBFloat16')
텐서를 bfloat16
형으로 변환합니다.
인자:
x
:Tensor
또는SparseTensor
.name
: 오퍼레이션의 명칭. (선택사항)
반환값:
x
와 구조(shape)가 같은 bfloat16
형의 Tensor
또는 SparseTensor
.
예외:
TypeError
:x
가bfloat16
형으로 변환될 수 없는 경우.
출처: 텐서 변환
Tensorflow tf.to_bfloat16 결과
In [1]: import tensorflow as tf
In [2]: import tfutil
In [3]: const1 = tf.constant(1, dtype=tf.float32)
In [4]: tfutil.print_constant(const1)
1.0
In [5]: print(const1)
Tensor("Const:0", shape=(), dtype=float32)
In [6]: bfloat1 = tf.to_bfloat16(const1)
In [7]: tfutil.print_operation_value(bfloat1)
16256
In [8]: print(bfloat1)
Tensor("ToBFloat16:0", shape=(), dtype=bfloat16)
In [9]: const2 = tf.constant([2, 3], dtype=tf.float32)
In [10]: tfutil.print_constant(const2)
[ 2. 3.]
In [11]: print(const2)
Tensor("Const_1:0", shape=(2,), dtype=float32)
In [12]: bfloat2 = tf.to_bfloat16(const2)
In [13]: tfutil.print_operation_value(bfloat2)
[16384 16448]
In [14]: print(bfloat2)
Tensor("ToBFloat16_1:0", shape=(2,), dtype=bfloat16)
tf.to_int32(x, name='ToInt32')
텐서를 int32
형으로 변환합니다.
인자:
x
:Tensor
또는SparseTensor
.name
: 오퍼레이션의 명칭. (선택사항)
반환값:
x
와 구조(shape)가 같은 int32
형의 Tensor
또는 SparseTensor
.
예외:
TypeError
:x
가int32
형으로 변환될 수 없는 경우.
출처: 텐서 변환
Tensorflow tf.to_int32 결과
In [1]: import tensorflow as tf
In [2]: import tfutil
In [3]: const1 = tf.constant(1, dtype=tf.float32)
In [4]: tfutil.print_constant(const1)
1.0
In [5]: print(const1)
Tensor("Const:0", shape=(), dtype=float32)
In [6]: int32_1 = tf.to_int32(const1)
In [7]: tfutil.print_operation_value(int32_1)
1
In [8]: print(int32_1)
Tensor("ToInt32:0", shape=(), dtype=int32)
In [9]: const2 = tf.constant([2, 3], dtype=tf.float32)
In [10]: tfutil.print_constant(const2)
[ 2. 3.]
In [11]: print(const2)
Tensor("Const_1:0", shape=(2,), dtype=float32)
In [12]: int32_2 = tf.to_int32(const2)
In [13]: tfutil.print_operation_value(int32_2)
[2 3]
In [14]: print(int32_2)
Tensor("ToInt32_1:0", shape=(2,), dtype=int32)
tf.to_int64(x, name='ToInt64')
텐서를 int64
형으로 변환합니다.
인자:
x
:Tensor
또는SparseTensor
.name
: 오퍼레이션의 명칭. (선택사항)
반환값:
x
와 구조(shape)가 같은 int64
형의 Tensor
또는 SparseTensor
.
예외:
TypeError
:x
가int64
형으로 변환될 수 없는 경우.
출처: 텐서 변환
Tensorflow tf.to_int64 결과
In [1]: import tensorflow as tf
In [2]: import tfutil
In [3]: const1 = tf.constant(1, dtype=tf.float32)
In [4]: tfutil.print_constant(const1)
1.0
In [5]: print(const1)
Tensor("Const:0", shape=(), dtype=float32)
In [6]: int64_1 = tf.to_int64(const1)
In [7]: tfutil.print_operation_value(int64_1)
1
In [8]: print(int64_1)
Tensor("ToInt64:0", shape=(), dtype=int64)
In [9]: const2 = tf.constant([2, 3], dtype=tf.float32)
In [10]: tfutil.print_constant(const2)
[ 2. 3.]
In [11]: print(const2)
Tensor("Const_1:0", shape=(2,), dtype=float32)
In [12]: int64_2 = tf.to_int64(const2)
In [13]: tfutil.print_operation_value(int64_2)
[2 3]
In [14]: print(int64_2)
Tensor("ToInt64_1:0", shape=(2,), dtype=int64)
tf.cast(x, dtype, name=None)
텐서를 새로운 자료형으로 변환합니다.
x
(Tensor
의 경우) 또는 x.values
(SparseTensor
의 경우)를 dtype
형으로 변환합니다.
예시:
# 텐서 `a`는 [1.8, 2.2], 자료형은 tf.float
tf.cast(a, tf.int32) ==> [1, 2] # dtype=tf.int32
인자:
x
:Tensor
또는SparseTensor
.dtype
: 변환될 자료형.name
: 오퍼레이션의 명칭. (선택사항)
반환값:
x
와 구조(shape)가 같은 int64
형의 Tensor
또는 SparseTensor
.
예외:
TypeError
:x
가dtype
형으로 변환될 수 없는 경우.
출처: 텐서 변환
Tensorflow tf.cast 결과
In [1]: import tensorflow as tf
In [2]: import tfutil
In [3]: const1 = tf.constant(127, dtype=tf.int32)
In [4]: tfutil.print_constant(const1)
127
In [5]: print(const1)
Tensor("Const:0", shape=(), dtype=int32)
In [6]: f32 = tf.cast(const1, tf.float32)
In [7]: tfutil.print_operation_value(f32)
127.0
In [8]: print(f32)
Tensor("Cast:0", shape=(), dtype=float32)
In [9]: f64 = tf.cast(const1, tf.float64)
In [10]: tfutil.print_operation_value(f64)
127.0
In [11]: print(f64)
Tensor("Cast_1:0", shape=(), dtype=float64)
In [12]: i8 = tf.cast(const1, tf.int8)
In [13]: tfutil.print_operation_value(i8)
127
In [14]: print(i8)
Tensor("Cast_2:0", shape=(), dtype=int8)
In [15]: i16 = tf.cast(const1, tf.int16)
In [16]: tfutil.print_operation_value(i16)
127
In [17]: print(i16)
Tensor("Cast_3:0", shape=(), dtype=int16)
In [18]: i64 = tf.cast(const1, tf.int64)
In [19]: tfutil.print_operation_value(i64)
127
In [20]: print(i64)
Tensor("Cast_4:0", shape=(), dtype=int64)
In [21]: u8 = tf.cast(const1, tf.uint8)
In [22]: tfutil.print_operation_value(u8)
127
In [23]: print(u8)
Tensor("Cast_5:0", shape=(), dtype=uint8)
In [24]: const2 = tf.constant([127, 255])
In [25]: tfutil.print_constant(const2)
[127 255]
In [26]: print(const2)
Tensor("Const_1:0", shape=(2,), dtype=int32)
In [27]: f32 = tf.cast(const2, tf.float32)
In [28]: tfutil.print_operation_value(f32)
[ 127. 255.]
In [29]: print(f32)
Tensor("Cast_6:0", shape=(2,), dtype=float32)
In [30]: f64 = tf.cast(const2, tf.float64)
In [31]: tfutil.print_operation_value(f64)
[ 127. 255.]
In [32]: print(f64)
Tensor("Cast_7:0", shape=(2,), dtype=float64)
In [33]: i8 = tf.cast(const2, tf.int8)
In [34]: tfutil.print_operation_value(i8)
[127 -1]
In [35]: print(i8)
Tensor("Cast_8:0", shape=(2,), dtype=int8)
In [36]: i16 = tf.cast(const2, tf.int16)
In [37]: tfutil.print_operation_value(i16)
[127 255]
In [38]: print(i16)
Tensor("Cast_9:0", shape=(2,), dtype=int16)
In [39]: i64 = tf.cast(const2, tf.int64)
In [40]: tfutil.print_operation_value(i64)
[127 255]
In [41]: print(i64)
Tensor("Cast_10:0", shape=(2,), dtype=int64)
In [42]: u8 = tf.cast(const2, tf.uint8)
In [43]: tfutil.print_operation_value(u8)
[127 255]
In [44]: print(u8)
Tensor("Cast_11:0", shape=(2,), dtype=uint8)
tf.saturate_cast(value, dtype, name=None)
value
를 dtype
형으로 안전하게 포화 형변환(saturating cast)합니다.
이 함수는 입력을 dtype
으로 스케일링(scaling) 없이 변환합니다. 형변환 시 오버플로우나 언더플로우가 발생할 수 있는 값들에 대해, 이 함수는 해당 값들을 허용되는 값 범위로 넣은 뒤 형변환을 진행합니다.
인자:
value
:Tensor
.dtype
:DType
오브젝트. 변환될 자료형.name
: 오퍼레이션의 명칭. (선택사항)
반환값:
dtype
형으로 안전하게 변환된 value
.
출처: 텐서 변환
Tensorflow tf.saturate_cast 결과
In [1]: import tensorflow as tf
In [2]: import tfutil
In [3]: const1 = tf.constant(127, dtype=tf.int32)
In [4]: tfutil.print_constant(const1)
127
In [5]: print(const1)
Tensor("Const:0", shape=(), dtype=int32)
In [6]: f32 = tf.saturate_cast(const1, tf.float32)
In [7]: tfutil.print_operation_value(f32)
127.0
In [8]: print(f32)
Tensor("saturate_cast:0", shape=(), dtype=float32)
In [9]: f64 = tf.saturate_cast(const1, tf.float64)
In [10]: tfutil.print_operation_value(f64)
127.0
In [11]: print(f64)
Tensor("saturate_cast_1:0", shape=(), dtype=float64)
In [12]: i8 = tf.saturate_cast(const1, tf.int8)
In [13]: tfutil.print_operation_value(i8)
127
In [14]: print(i8)
Tensor("saturate_cast_2:0", shape=(), dtype=int8)
In [15]: i16 = tf.saturate_cast(const1, tf.int16)
In [16]: tfutil.print_operation_value(i16)
127
In [17]: print(i16)
Tensor("saturate_cast_3:0", shape=(), dtype=int16)
In [18]: i64 = tf.saturate_cast(const1, tf.int64)
In [19]: tfutil.print_operation_value(i64)
127
In [20]: print(i64)
Tensor("saturate_cast_4:0", shape=(), dtype=int64)
In [21]: u8 = tf.saturate_cast(const1, tf.uint8)
In [22]: tfutil.print_operation_value(u8)
127
In [23]: print(u8)
Tensor("saturate_cast_5:0", shape=(), dtype=uint8)
In [24]: const2 = tf.constant([127, 255])
In [25]: tfutil.print_constant(const2)
[127 255]
In [26]: print(const2)
Tensor("Const_1:0", shape=(2,), dtype=int32)
In [27]: f32 = tf.saturate_cast(const2, tf.float32)
In [28]: tfutil.print_operation_value(f32)
[ 127. 255.]
In [29]: print(f32)
Tensor("saturate_cast_6:0", shape=(2,), dtype=float32)
In [30]: f64 = tf.saturate_cast(const2, tf.float64)
In [31]: tfutil.print_operation_value(f64)
[ 127. 255.]
In [32]: print(f64)
Tensor("saturate_cast_7:0", shape=(2,), dtype=float64)
In [33]: i8 = tf.saturate_cast(const2, tf.int8)
In [34]: tfutil.print_operation_value(i8)
[127 127]
In [35]: print(i8)
Tensor("saturate_cast_8:0", shape=(2,), dtype=int8)
In [36]: i16 = tf.saturate_cast(const2, tf.int16)
In [37]: tfutil.print_operation_value(i16)
[127 255]
In [38]: print(i16)
Tensor("saturate_cast_9:0", shape=(2,), dtype=int16)
In [39]: i64 = tf.saturate_cast(const2, tf.int64)
In [40]: tfutil.print_operation_value(i64)
[127 255]
In [41]: print(i64)
Tensor("saturate_cast_10:0", shape=(2,), dtype=int64)
In [42]: u8 = tf.saturate_cast(const2, tf.uint8)
In [43]: tfutil.print_operation_value(u8)
[127 255]
In [44]: print(u8)
Tensor("saturate_cast_11:0", shape=(2,), dtype=uint8)
tf.bitcast(input, type, name=None)
텐서를 다른 자료형으로 데이터 복사 없이 비트캐스트(bitcast)합니다.
input
텐서가 주어질 때, 이 함수는 input
과 같은 버퍼 데이터를 가진 자료형 type
의 텐서를 반환합니다.
만약 입력의 자료형 T
가 출력의 자료형 type
에 비해 더 큰 경우, 구조(shape)가 [...]에서 [..., sizeof(T
)/sizeof(type
)]으로 변형됩니다.
만약 T
가 type
에 비해 더 작은 경우, 가장 오른쪽의 차원이 sizeof(type
)/sizeof(T
)와 같아야 합니다. 구조는 [..., sizeof(type
)/sizeof(T
)] to [...]으로 변형됩니다.
인자:
input
:Tensor
. 다음의 자료형이 가능합니다:float32
,float64
,int64
,int32
,uint8
,uint16
,int16
,int8
,complex64
,complex128
,qint8
,quint8
,qint32
,half
.type
:tf.DType
. 다음 중 하나가 가능합니다:tf.float32, tf.float64, tf.int64, tf.int32, tf.uint8, tf.uint16, tf.int16, tf.int8, tf.complex64, tf.complex128, tf.qint8, tf.quint8, tf.qint32, tf.half
.name
: 오퍼레이션의 명칭. (선택사항)
반환값:
type
자료형의 Tensor
.
출처: 텐서 변환
Tensorflow tf.bitcast 결과
In [1]:
import tensorflow as tf
import numpy as np
import tfutil
In [2]:
x = 37.0
const1 = tf.constant(x)
print(const1)
print(tf.shape(const1))
tfutil.print_constant(const1)
Tensor("Const:0", shape=(), dtype=float32)
Tensor("Shape:0", shape=(0,), dtype=int32)
37.0
In [3]:
bc_const1 = tf.bitcast(const1, tf.int32)
print(bc_const1)
print(tf.shape(bc_const1))
tfutil.print_operation_value(bc_const1)
Tensor("Bitcast:0", shape=(), dtype=int32)
Tensor("Shape_1:0", shape=(0,), dtype=int32)
1108606976
In [4]:
x = -1
invert_bits = tf.constant(x) - bc_const1
print(invert_bits)
print(tf.shape(invert_bits))
tfutil.print_operation_value(invert_bits)
Tensor("sub:0", shape=(), dtype=int32)
Tensor("Shape_2:0", shape=(0,), dtype=int32)
-1108606977
In [5]:
bc_to_float = tf.bitcast(invert_bits, tf.float32)
print(bc_to_float)
print(tf.shape(bc_to_float))
tfutil.print_operation_value(bc_to_float)
Tensor("Bitcast_1:0", shape=(), dtype=float32)
Tensor("Shape_3:0", shape=(0,), dtype=int32)
-0.115234
tf.shape_n(input, name=None)
텐서의 구조(shape)를 반환합니다.
이 함수는 input[i]
들의 구조를 나타내는 N
개의 1-D 정수 텐서를 반환합니다.
인자:
input
: 같은 자료형의 1개 이상의Tensor
의 리스트.name
: 오퍼레이션의 명칭. (선택사항)
반환값:
input
의 텐서와 같은 개수의 int32
형 Tensor
의 리스트.
출처: 텐서 변환
이 포스팅은 머신러닝/딥러닝 오픈소스 Tensorflow 개발을 위한 선행학습으로 Tensorflow API Document의 Python API 대한 학습노트입니다.