Spec-Zone.ru › TensorFlow

tf.io.decode_raw

Преобразуйте сырые байты из входного тензора в числовые тензоры.

tf.io.decode_raw(
    input_bytes, out_type, little_endian=True, fixed_length=None, name=None
)

Используется в блокнотах

Используется в руководстве
  • Вступление к тензорам

Каждый компонент входного тензора интерпретируется как последовательность байтов. Затем эти байты декодируются как числа в формате, указанном в 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)>

Обратите внимание, что ранг выходного тензора всегда на единицу больше входного:

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])>

Операция позволяет указать порядок байтов (endianness) через параметр 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, генерируются несколько значений:

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)>
Аргументы
input_bytes Каждый элемент входного тензора преобразуется в массив байтов.

В настоящее время это должен быть тензор строк (байтов), хотя семантически операция должна поддерживать любой ввод.

out_type Тип выходных данных. Допустимые типы — half, float, double, int32, uint16, uint8, int16, int8, int64.
little_endian Определяет, находятся ли данные в формате little-endian. Данные будут преобразованы в порядок байтов хоста, если необходимо.
fixed_length Если задано, будут преобразованы первые fixed_length байтов каждого элемента. Данные будут дополнены нулями или усечены до заданной длины.

fixed_length должно быть кратным размеру out_type.

fixed_length должно быть указано, если элементы input_bytes имеют переменную длину.

name Имя операции (необязательно).
Возвращаемое значение
Объект Tensor, хранящий декодированные байты.

© 2022 The TensorFlow Authors. All rights reserved.
Licensed under the Creative Commons Attribution License 4.0.
Code samples licensed under the Apache 2.0 License.
https://www.tensorflow.org/api_docs/python/tf/io/decode_raw

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API