將原始字節從輸入張量轉換為數字張量。
用法
tf.io.decode_raw(
input_bytes, out_type, little_endian=True, fixed_length=None, name=None
)
參數
-
input_bytes
輸入張量的每個元素都轉換為字節數組。目前,這必須是字符串(字節)的張量,盡管在語義上操作應該支持任何輸入。
-
out_type
DType
的輸出。可接受的類型是half
,float
,double
,int32
,uint16
,uint8
,int16
,int8
,int64
。 -
little_endian
input_bytes
數據是否為小端格式。如有必要,數據將轉換為主機字節順序。 -
fixed_length
如果設置,第一個fixed_length
每個元素的字節將被轉換。數據將被零填充或截斷到指定的長度。fixed_length
必須是out_type
大小的倍數。如果
input_bytes
的元素是可變長度的,則必須指定fixed_length
。 -
name
操作的名稱(可選)。
返回
-
存儲解碼字節的
Tensor
對象。
輸入張量的每個分量都被解釋為一個字節序列。然後將這些字節解碼為 out_type
指定格式的數字。
tf.io.decode_raw(tf.constant("1"), tf.uint8)
<tf.Tensor:shape=(1,), dtype=uint8, numpy=array([49], dtype=uint8)>
tf.io.decode_raw(tf.constant("1,2"), tf.uint8)
<tf.Tensor:shape=(3,), dtype=uint8, numpy=array([49, 44, 50], dtype=uint8)>
請注意,輸出張量的秩總是比輸入張量多 1:
tf.io.decode_raw(tf.constant(["1","2"]), tf.uint8).shape
TensorShape([2, 1])
tf.io.decode_raw(tf.constant([["1"],["2"]]), tf.uint8).shape
TensorShape([2, 1, 1])
這是因為輸入中的每個字節都被轉換為輸出上的新值(如果輸出類型為 uint8
或 int8
,否則輸入塊將被轉換為新值):
tf.io.decode_raw(tf.constant("123"), tf.uint8)
<tf.Tensor:shape=(3,), dtype=uint8, numpy=array([49, 50, 51], dtype=uint8)>
tf.io.decode_raw(tf.constant("1234"), tf.uint8)
<tf.Tensor:shape=(4,), dtype=uint8, numpy=array([49, 50, 51, 52], ...
# chuncked output
tf.io.decode_raw(tf.constant("12"), tf.uint16)
<tf.Tensor:shape=(1,), dtype=uint16, numpy=array([12849], dtype=uint16)>
tf.io.decode_raw(tf.constant("1234"), tf.uint16)
<tf.Tensor:shape=(2,), dtype=uint16, numpy=array([12849, 13363], ...
# int64 output
tf.io.decode_raw(tf.constant("12345678"), tf.int64)
<tf.Tensor:... numpy=array([4050765991979987505])>
tf.io.decode_raw(tf.constant("1234567887654321"), tf.int64)
<tf.Tensor:... numpy=array([4050765991979987505, 3544952156018063160])>
該操作允許通過 little_endian
參數指定字節順序。
tf.io.decode_raw(tf.constant("\x0a\x0b"), tf.int16)
<tf.Tensor:shape=(1,), dtype=int16, numpy=array([2826], dtype=int16)>
hex(2826)
'0xb0a'
tf.io.decode_raw(tf.constant("\x0a\x0b"), tf.int16, little_endian=False)
<tf.Tensor:shape=(1,), dtype=int16, numpy=array([2571], dtype=int16)>
hex(2571)
'0xa0b'
如果 input_bytes
的元素長度不同,則必須指定 fixed_length
:
tf.io.decode_raw(tf.constant([["1"],["23"]]), tf.uint8, fixed_length=4)
<tf.Tensor:shape=(2, 1, 4), dtype=uint8, numpy=
array([[[49, 0, 0, 0]],
[[50, 51, 0, 0]]], dtype=uint8)>
如果 fixed_length
值大於 out_type
dtype 的長度,則會生成多個值:
tf.io.decode_raw(tf.constant(["1212"]), tf.uint16, fixed_length=4)
<tf.Tensor:shape=(1, 2), dtype=uint16, numpy=array([[12849, 12849]], ...
如果輸入值大於 fixed_length
,則將其截斷:
x=''.join([chr(1), chr(2), chr(3), chr(4)])
tf.io.decode_raw(x, tf.uint16, fixed_length=2)
<tf.Tensor:shape=(1,), dtype=uint16, numpy=array([513], dtype=uint16)>
hex(513)
'0x201'
如果指定了little_endian
和fixed_length
,則在字節序轉換之前截斷到固定長度:
x=''.join([chr(1), chr(2), chr(3), chr(4)])
tf.io.decode_raw(x, tf.uint16, fixed_length=2, little_endian=False)
<tf.Tensor:shape=(1,), dtype=uint16, numpy=array([258], dtype=uint16)>
hex(258)
'0x102'
如果輸入值都具有相同的長度,則指定 fixed_length
等於字符串的大小不應更改輸出:
x = ["12345678", "87654321"]
tf.io.decode_raw(x, tf.int16)
<tf.Tensor:shape=(2, 4), dtype=int16, numpy=
array([[12849, 13363, 13877, 14391],
[14136, 13622, 13108, 12594]], dtype=int16)>
tf.io.decode_raw(x, tf.int16, fixed_length=len(x[0]))
<tf.Tensor:shape=(2, 4), dtype=int16, numpy=
array([[12849, 13363, 13877, 14391],
[14136, 13622, 13108, 12594]], dtype=int16)>
相關用法
- Python tf.io.decode_json_example用法及代碼示例
- Python tf.io.decode_gif用法及代碼示例
- Python tf.io.decode_proto用法及代碼示例
- Python tf.io.deserialize_many_sparse用法及代碼示例
- Python tf.io.gfile.GFile.close用法及代碼示例
- Python tf.io.gfile.join用法及代碼示例
- Python tf.io.parse_example用法及代碼示例
- Python tf.io.gfile.exists用法及代碼示例
- Python tf.io.serialize_tensor用法及代碼示例
- Python tf.io.gfile.GFile用法及代碼示例
- Python tf.io.SparseFeature用法及代碼示例
- Python tf.io.gfile.copy用法及代碼示例
- Python tf.io.gfile.glob用法及代碼示例
- Python tf.io.TFRecordWriter用法及代碼示例
- Python tf.io.RaggedFeature用法及代碼示例
- Python tf.io.read_file用法及代碼示例
- Python tf.io.write_graph用法及代碼示例
- Python tf.io.TFRecordOptions.get_compression_type_string用法及代碼示例
- Python tf.image.random_brightness用法及代碼示例
- Python tf.image.pad_to_bounding_box用法及代碼示例
注:本文由純淨天空篩選整理自tensorflow.org大神的英文原創作品 tf.io.decode_raw。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。