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