Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
515 of 824 menu
◀ ▶

Класс TFRecordDataset

Класс TFRecordDataset создает датасет, который читает записи из одного или нескольких файлов формата TFRecord. Первым параметром класс принимает имя файла или список файлов. Формат TFRecord - это простой бинарный формат для хранения последовательности записей, который широко используется в TensorFlow для эффективной загрузки больших объемов данных.

Датасет возвращает тензоры строк с типом tf.string, каждый из которых содержит сериализованную запись. Для извлечения данных из этих записей обычно используется функция tf.io.parse_single_example вместе с описанием признаков.

Синтаксис

tf.data.TFRecordDataset( filenames, compression_type=None, buffer_size=None, num_parallel_reads=None )

Параметры

Класс TFRecordDataset принимает следующие параметры:

  • filenames - строка с именем файла, список строк или тензор строк с именами TFRecord файлов
  • compression_type - тип сжатия данных, может быть None, 'GZIP' или 'ZLIB'
  • buffer_size - размер буфера в байтах для чтения
  • num_parallel_reads - число файлов, читаемых параллельно

Пример

Давайте создадим TFRecord файл и прочитаем его с помощью класса TFRecordDataset:

import tensorflow as tf # Create sample TFRecord file with tf.io.TFRecordWriter('sample.tfrecord') as writer: writer.write(tf.constant('abcde').numpy()) writer.write(tf.constant('model.keras').numpy()) # Read records from file dataset = tf.data.TFRecordDataset('sample.tfrecord') for record in dataset: print(record)

Результат выполнения кода:

tf.Tensor(b'abcde', shape=(), dtype=string) tf.Tensor(b'model.keras', shape=(), dtype=string)

Пример

Давайте создадим TFRecord файл с сериализованными примерами и распарсим их с помощью parse_single_example:

<+python+> import tensorflow as tf # Define feature description feature_description = { 'value': tf.io.FixedLenFeature([], tf.int64), 'label': tf.io.FixedLenFeature([], tf.string) } def serialize_example(value, label): feature = { 'value': tf.train.Feature( int64_list=tf.train.Int64List(value=[value]) ), 'label': tf.train.Feature( bytes_list=tf.train.BytesList( value=[label.encode()] ) ) } example = tf.train.Example( features=tf.train.Features(feature=feature) ) return example.SerializeToString() # Write serialized examples to file with tf.io.TFRecordWriter('data.tfrecord') as writer: writer.write(serialize_example(1, 'abcde')) writer.write(serialize_example(2, 'model.keras')) # Parse records dataset = tf.data.TFRecordDataset('data.tfrecord') def parse_fn(record): return tf.io.parse_single_example( record, feature_description ) parsed = dataset.map(parse_fn) for example in parsed: print(example['value'].numpy(), example['label'].numpy()) <-python+>

Результат выполнения кода:

<+python+> 1 b'abcde' 2 b'model.keras' <-python+>

Пример

Давайте прочитаем несколько TFRecord файлов параллельно с помощью параметра num_parallel_reads:

<+python+> import tensorflow as tf # Create multiple TFRecord files for i in range(2): with tf.io.TFRecordWriter( f'part_{i}.tfrecord' ) as writer: writer.write(tf.constant('abcde').numpy()) writer.write( tf.constant('model.keras').numpy() ) # Read files in parallel files = ['part_0.tfrecord', 'part_1.tfrecord'] dataset = tf.data.TFRecordDataset( files, num_parallel_reads=2 ) for record in dataset: print(record) <-python+>

Результат выполнения кода:

<+python+> tf.Tensor(b'abcde', shape=(), dtype=string) tf.Tensor(b'model.keras', shape=(), dtype=string) tf.Tensor(b'abcde', shape=(), dtype=string) tf.Tensor(b'model.keras', shape=(), dtype=string) <-python+>

Пример

Давайте прочитаем сжатый GZIP TFRecord файл, указав параметр compression_type:

<+python+> import tensorflow as tf # Create GZIP compressed TFRecord file options = tf.io.TFRecordOptions( compression_type='GZIP' ) with tf.io.TFRecordWriter( 'compressed.tfrecord', options ) as writer: writer.write(tf.constant('abcde').numpy()) writer.write(tf.constant('model.keras').numpy()) # Read compressed file dataset = tf.data.TFRecordDataset( 'compressed.tfrecord', compression_type='GZIP' ) for record in dataset: print(record) <-python+>

Результат выполнения кода:

<+python+> tf.Tensor(b'abcde', shape=(), dtype=string) tf.Tensor(b'model.keras', shape=(), dtype=string) <-python+>

Смотрите также

  • класс TextLineDataset,
    который читает строки из текстовых файлов
  • класс FixedLengthRecordDataset,
    который читает записи фиксированной длины
  • класс Iterator,
    который предоставляет доступ к элементам датасета
  • функцию timeseries_dataset_from_array,
    которая создает датасет временных рядов из массива
← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить