Эффективный Tensorflow пул истории Cyclegan

в документе CycleGAN упоминается пул истории для дискриминатора. Таким образом, мы сохраняем последнее, например. 50 выборок из генератора и подать их на дискриминатор. Без истории это довольно просто, мы можем использовать tf.data.Dataset и итераторы для подключения данных к сети. А вот с пулом истории я так и не понял как пользоваться tf.data.Dataset API. Код внутри тренировочного цикла выглядит примерно так

fx, fy = sess.run(model_ops['fakes'], feed_dict={
    self.cur_x: cur_x,
    self.cur_y: cur_y,
})

cur_x, cur_y = sess.run([self.X_feed.feed(), self.Y_feed.feed()])
feeder_dict = {
    self.cur_x: cur_x,
    self.cur_y: cur_y,
    self.prev_fake_x: x_pool.query(fx, step),
    self.prev_fake_y: y_pool.query(fy, step),
}
# self.cur_x, self.cur_y, self.prev_fake_x, self.prev_fake_y are just placeholders
# x_pool and y_pool are simple wrappers for random sampling from the history pool and saving new images to the pool
for _ in range(dis_train):
    sess.run(model_ops['train']['dis'], feed_dict=feeder_dict)
for _ in range(gen_train):
    sess.run(model_ops['train']['gen'], feed_dict=feeder_dict)

Что меня беспокоит в коде, так это его неэффективность, например. нет возможности предварительно загрузить следующий пакет во время обучения, как с предварительной выборкой tf.data API, но я не вижу никакого способа использовать tf.data API. Предлагает ли он какой-то пул истории, который я мог бы использовать с предварительной выборкой и общей оптимизацией модели загрузки данных? Кроме того, аналогичная проблема возникает, когда у меня есть некоторое соотношение между операциями обучения дискриминаторов и операциями обучения генераторов. Если я хочу, например, запустить 2 шага операции обучения генераторов на 1 шаг дискриминаторов, можно ли это сделать, используя одни и те же данные? Потому что с tf.data API новая выборка извлекается из итератора каждый раз, когда вызывается sess.run.

Есть ли способ реализовать это правильно и эффективно?


person Matěj Račinský    schedule 03.02.2019    source источник


Ответы (1)


Итак, я обнаружил, что объединение истории уже реализовано в TFGAN тензорный репозиторий.

person Matěj Račinský    schedule 11.02.2019