Tensorflow 1.10 TFRecordDataset-восстановление TFRecords

Примечания:

  1. этот вопрос распространяется на предыдущие вопрос. В этом вопросе я спрашиваю о лучшем способе хранения некоторых фиктивных данных как Example и SequenceExample стремясь узнать, что лучше для данных, подобных фиктивным данным. Я предоставляю обе явные формулировки Example и SequenceExample строительство, а также, в ответах, программный способ сделать это.

  2. потому что это все еще много кода, я предоставляю Colab (интерактивный ноутбук jupyter, размещенный google) файл, где вы можете попробовать код самостоятельно, чтобы помочь. Весь необходимый код есть и он щедро комментировал.

Я пытаюсь узнать, как конвертировать мои данные в записи TF, поскольку заявленные преимущества стоят моих данных. Тем не менее, документация оставляет желать лучшего, а учебники / блоги (которые я видел), которые пытаются углубиться, действительно касаются только surface или rehash разреженные документы, которые существуют.

для демо-данных, рассмотренных в my предыдущий вопрос - как и здесь-я написал приличный класс, который берет:

  • последовательность с n каналами (в этом примере она основана на целых числах, фиксированной длины и с n каналами)
  • вероятности классов с мягкими метками (в этом примере есть n классов и на основе float)
  • некоторые метаданные (в этом примере строка и два поплавки)

и может кодировать данные в 1 из 6 форм:

  1. пример, с каналами последовательности / классами, разделенными в числовом типе (int64 в этом случае) с метаданными, прикрепленными
  2. пример, с каналами / классами последовательности, разделенными как строка байта (через numpy.ndarray.tostring()) с метаданными, прикрепленными
  3. пример, с последовательностью / классами, сброшенными как байтовая строка с метаданными данными on

  4. SequenceExample, с каналами последовательности / классами, отдельными в числовом типе и метаданных в качестве контекста

  5. SequenceExample, с каналами последовательности, отдельными как строка байта и метаданные в качестве контекста
  6. SequenceExample, с последовательностью и классами, сбрасываемыми как строка байтов и метаданные в качестве контекста

это прекрасно работает.

на Colab я показываю, как писать фиктивные данные всех в же файл, а также в отдельных файлах.

мой вопрос: как я могу восстановить эти данные?

Я дал 4 попытки сделать это в связанном файле.

почему TFReader находится в другом подпакете от TFWriter?

1 ответов


решается путем обновления функций, чтобы включить информацию о форме и помнить, что SequenceExample are безымянный FeatureLists.

context_features = {
    'Name' : tf.FixedLenFeature([], dtype=tf.string),
    'Val_1': tf.FixedLenFeature([], dtype=tf.float32),
    'Val_2': tf.FixedLenFeature([], dtype=tf.float32)
}

sequence_features = {
    'sequence': tf.FixedLenSequenceFeature((3,), dtype=tf.int64),
    'pclasses'  : tf.FixedLenSequenceFeature((3,), dtype=tf.float32),
}

def parse(record):
  parsed = tf.parse_single_sequence_example(
        record,
        context_features=context_features,
        sequence_features=sequence_features
  )
  return parsed


filenames = [os.path.join(os.getcwd(),f"dummy_sequences_{i}.tfrecords") for i in range(3)]
dataset = tf.data.TFRecordDataset(filenames).map(lambda r: parse(r))

iterator = tf.data.Iterator.from_structure(dataset.output_types,
                                           dataset.output_shapes)
next_element = iterator.get_next()

training_init_op = iterator.make_initializer(dataset)

for _ in range(2):
  # Initialize an iterator over the training dataset.
  sess.run(training_init_op)
  for _ in range(3):
    ne = sess.run(next_element)
    print(ne)