Tensorflow: подсчет количества примеров в файле TFRecord - без использования устаревшего `tf.python_io.tf_record_iterator` - PullRequest
0 голосов
/ 09 апреля 2019

Пожалуйста, прочитайте пост перед пометкой Дубликат :

Я искал эффективный способ подсчета количества примеров в файле изображений TFRecord. Поскольку в файле TFRecord не сохраняются какие-либо метаданные о самом файле, пользователь должен выполнить цикл по файлу для вычисления этой информации.

В StackOverflow есть несколько разных вопросов, которые отвечают на этот вопрос. Проблема в том, что все они, похоже, используют команду DEPRECATED tf.python_io.tf_record_iterator, поэтому это нестабильное решение. Вот пример существующих сообщений:

Получение общего количества записей из файла .tfrecords в Tensorflow

Количество примеров в каждой записи

Количество примеров в каждой записи

Поэтому мне было интересно, есть ли способ подсчета количества записей с использованием нового API набора данных.

Ответы [ 2 ]

1 голос
/ 07 июня 2019

В классе Dataset указан метод reduce.Они приводят пример подсчета записей с использованием метода:

# generate the dataset (batch size and repeat must be 1, maybe avoid dataset manipulation like map and shard)
ds = tf.data.Dataset.range(5) 
# count the examples by reduce
cnt = ds.reduce(np.int64(0), lambda x, _: x + 1)

## produces 5

Не знаю, работает ли этот метод быстрее, чем цикл @ в krishnab's.

0 голосов
/ 09 апреля 2019

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

Используя API набора данных, я настраиваю и итератор, а затем зацикливаюсь на нем. Не уверен, что это самый быстрый, но он работает.

count_test = tf.data.TFRecordDataset('testing.tfrecord')
count_test = count_test.map(_parse_image_function)
count_test = count_test.repeat(1)
count_test = count_test.batch(1)
test_counter = count_test.make_one_shot_iterator()

c = 0
for ex in test_counter:
    c += 1
f"There are {c} testing records"

Это, кажется, работало достаточно хорошо даже для относительно большого файла.

...