Разбор TFRecord при активном выполнении

Учитывая, что можно запустить tf.Data.Datasets в режиме активного выполнения, как мне открыть файл TFRecord в режиме активного выполнения? Меня больше беспокоит написание синтаксического анализатора, потому что в настоящее время я использую dataset.make_one_shot_iterator в качестве итератора (между несколькими изображениями в моем контейнере).


person Ricardo Barros Lourenço    schedule 23.04.2018    source источник
comment
Я не совсем понимаю вопрос: если вы используете tf.data.TFRecordDataset, это будет работать так же хорошо, если включено активное выполнение. Возможно, вы можете обновить вопрос, указав более подробную информацию о том, что вы пытаетесь сделать?   -  person ash    schedule 01.05.2018
comment
@ash, когда я включаю активное выполнение, я получаю следующую ошибку сразу после моего метода синтаксического анализа: RuntimeError: dataset.make_one_shot_iterator is not supported when eager execution is enabled. . Это происходит независимо от выбранного метода итератора.   -  person Ricardo Barros Lourenço    schedule 01.05.2018
comment
А, я вижу, вы, вероятно, используете TensorFlow 1.7 или старше. Опубликовал ответ, надеюсь, что это поможет.   -  person ash    schedule 01.05.2018


Ответы (1)


В TensorFlow 1.8 и выше вы можете естественным образом выполнять итерацию по объекту tf.data.Dataset с включенным жадным выполнением.

ds = tf.data.TFRecordDataset(...).map(...).batch(...)
for x in ds:
  print(x)

make_one_shot_iterator также будет работать (продолжает работать, чтобы поддерживать совместимость с эквивалентным кодом для построения графа):

ds = tf.data.TFRecordDataset(...).map(...).batch(...)
itr = ds.make_one_shot_iterator()
for x in itr:
  print(x)

Однако в более старых версиях TensorFlow (где активное выполнение является недавно представленной функцией и, следовательно, менее испеченной), вам придется обернуть свой набор данных в tf.contrib.eager.Iterator, используя что-то вроде:

tfe  tf.contrib.eager
ds = tf.data.TFRecordDataset(...).map(...).batch(...)
for x in tfe.Iterator(ds):
  print(x)

См. эти ресурсы, связанные с выпуском 1.7: - Блокнот – пример RNN

Надеюсь, это поможет.

person ash    schedule 01.05.2018