Онлайн передискретизация во входном конвейере Tensorflow

У меня есть входной конвейер, похожий на тот, что вСверточная нейронная сеть руководство. Мой набор данных несбалансирован, и я хочу использовать передискретизацию меньшинства, чтобы попытаться справиться с этим. В идеале я хочу сделать это "онлайн", то есть я не хочу дублировать образцы данных на диске.

По сути, я хочу дублировать отдельные примеры (с некоторой вероятностью) на основе метки. Я немного читал о потоке управления в Tensorflow. И похожеtf.cond(pred, fn1, fn2) это путь Я просто изо всех сил пытаюсь найти правильную параметризацию, так какfn1 а такжеfn2 потребуется выводить списки тензоров, где списки имеют одинаковый размер.

Это примерно то, что я имею до сих пор:

image = image_preprocessing(image_buffer, bbox, False, thread_id)            
pred = tf.reshape(tf.equal(label, tf.convert_to_tensor([2])), [])
r_image = tf.cond(pred, lambda: [tf.identity(image), tf.identity(image)], lambda: [tf.identity(image),])
r_label = tf.cond(pred, lambda: [tf.identity(label), tf.identity(label)], lambda: [tf.identity(label),])

Тем не менее, это вызывает ошибку, как я уже упоминал ранее:

ValueError: fn1 and fn2 must return the same number of results.

Есть идеи?

П.С .: Это мой первый вопрос о переполнении стека. Любая обратная связь по моему вопросу приветствуется.

Ответы на вопрос(1)

Ваш ответ на вопрос