TensorFlow: разбить строку на два тензора - PullRequest
0 голосов
/ 25 мая 2019

У меня есть набор данных TFRecord, где каждая запись содержит 19 uint8s, за которыми следуют 36 байтов, представляющих 9 байтов с прямым порядком байтов.

Первые 19 байтов - это примеры, последние 10 поплавков - метка.Я просто хочу переосмыслить эти байты соответственно.

Tensorflow не нравится, когда я индексирую строку, подобную этой:

def parse(serialized):
    return tf.decode_raw(serialized[0:19], tf.uint8), tf.decode_raw(serialized[19:], tf.float32)

*** ValueError: Индекс вне диапазонаиспользуя вход dim 0;input имеет только 0 dims для 'strided_slice' (op: 'StridedSlice') с формами ввода: [], [1], [1], [1] и с вычисленными тензорами ввода: input [3] = <1>.

Далее я попытался интерпретировать сериализацию как байты, а затем переосмыслить фрагменты:

def parse(serialized):
    expanded = tf.decode_raw(serialized, tf.uint8)

    return tf.cast(expanded[0:19], tf.uint8), tf.cast(expanded[19:], tf.float32)

Это работает для uint8s, но для float32s он интерпретирует каждый байт как свойown float32:

(Pdb) sess.run(label_it)
array([205., 204., 204.,  60., 154., 153., 153.,  60., 102., 102., 166.,
        61.,  10., 215.,  35.,  60., 184.,  30.,  45.,  63.,  51.,  51.,
        51.,  61., 133., 235.,  81.,  61.,  92., 143.,  66.,  61., 164.,
       112.,  61.,  61.], dtype=float32)

Я просто хочу разделить эту строку на две части между 19-м и 20-м байтами, а затем декодировать ее.Но у меня чертовски много времени с этим.На данный момент мне интересно услышать какое-нибудь хакерское решение для этого.

Заранее спасибо!

1 Ответ

0 голосов
/ 25 мая 2019

Хех, я думаю, что задание этого вопроса помогло мне прояснить вопрос самому себе, и я смог найти ответ. Мой ответ tf.strings.substr()

def parse(serialized):
    example_str = tf.strings.substr(serialized, 0, 19)
    label_str = tf.strings.substr(serialized, 19, -1)

    return tf.decode_raw(example_str, tf.uint8), tf.decode_raw(label_str, tf.float32)

Но я бы хотел увидеть лучший способ публикации.

...