Как вы используете конвейер tf.data для выбора и пакетной обработки наборов данных?

Я пытаюсь использовать конвейер ввода tf.data, чтобы разрешить выбор набора данных во время выполнения при пакетной обработке данных. Следующее должно позволить мне запустить InitTrain / InitTest, чтобы выбрать, какой набор данных использовать:

TrainData = tf.data.Dataset.from_generator(TrainGenerator,tf.float32)
TestData = tf.data.Dataset.from_generator(TestGenerator,tf.float32)

DataIterator = tf.data.Iterator.from_structure(tf.float32)
DataNext = DataIterator.get_next()
InitTrain = DataIterator.make_initializer(TrainData)
InitTest = DataIterator.make_initializer(TestData)

Я могу использовать следующее, чтобы получить дополненный пакет, если не использую итератор:

TrainData.padded_batch(1000,someshape) 

Как я могу выполнить пакетную обработку данных, сохранив возможность выбора источника входных данных?

Возможным обходным путем было бы создать новый набор данных from_generator и создать генератор, который вызывает sessions.run в DataNext, чтобы создать набор данных, который может быть объединен в пакет, однако это приведет к выделению вызовов запуска, поэтому я сомневаюсь, что это именно то, как это было предназначено для использоваться.


person fezzik    schedule 03.11.2017    source источник


Ответы (1)


Каждый из ваших наборов данных функционирует независимо от другого, и итератор переключается между обнаружениями в зависимости от того, какой инициализатор вы используете. Итак, если вы хотите объединить один набор данных, но не другой, вы должны использовать:

TrainData = tf.data.Dataset.from_generator(TrainGenerator,tf.float32)
TrainData = TrainData.batch(100)

TestData = tf.data.Dataset.from_generator(TestGenerator,tf.float32)

DataIterator = tf.data.Iterator.from_structure(tf.float32)
DataNext = DataIterator.get_next()
InitTrain = DataIterator.make_initializer(TrainData)
InitTest = DataIterator.make_initializer(TestData)

Между прочим, вы также можете использовать тот факт, что два конвейера отличаются (если хотите), чтобы выполнять разные сопоставления для каждого набора данных. Так, например, вы можете использовать пакетную нормализацию данных поезда, но не нормализовать тестовые данные (если вы уже нормализовали весь набор данных).

person zephyrus    schedule 03.11.2017