将原始字节从输入张量转换为数字张量。
用法
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。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。