Tensorflow 1.10 TFRecordDataset-восстановление TFRecords
Примечания:
этот вопрос распространяется на предыдущие вопрос. В этом вопросе я спрашиваю о лучшем способе хранения некоторых фиктивных данных как
Example
иSequenceExample
стремясь узнать, что лучше для данных, подобных фиктивным данным. Я предоставляю обе явные формулировкиExample
иSequenceExample
строительство, а также, в ответах, программный способ сделать это.потому что это все еще много кода, я предоставляю Colab (интерактивный ноутбук jupyter, размещенный google) файл, где вы можете попробовать код самостоятельно, чтобы помочь. Весь необходимый код есть и он щедро комментировал.
Я пытаюсь узнать, как конвертировать мои данные в записи TF, поскольку заявленные преимущества стоят моих данных. Тем не менее, документация оставляет желать лучшего, а учебники / блоги (которые я видел), которые пытаются углубиться, действительно касаются только surface или rehash разреженные документы, которые существуют.
для демо-данных, рассмотренных в my предыдущий вопрос - как и здесь-я написал приличный класс, который берет:
- последовательность с n каналами (в этом примере она основана на целых числах, фиксированной длины и с n каналами)
- вероятности классов с мягкими метками (в этом примере есть n классов и на основе float)
- некоторые метаданные (в этом примере строка и два поплавки)
и может кодировать данные в 1 из 6 форм:
- пример, с каналами последовательности / классами, разделенными в числовом типе (
int64
в этом случае) с метаданными, прикрепленными - пример, с каналами / классами последовательности, разделенными как строка байта (через
numpy.ndarray.tostring()
) с метаданными, прикрепленными пример, с последовательностью / классами, сброшенными как байтовая строка с метаданными данными on
SequenceExample, с каналами последовательности / классами, отдельными в числовом типе и метаданных в качестве контекста
- SequenceExample, с каналами последовательности, отдельными как строка байта и метаданные в качестве контекста
- 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)