Sobreamostragem on-line no pipeline de entrada Tensorflow
Eu tenho um pipeline de entrada semelhante ao doRede Neural Convolucional tutorial. Meu conjunto de dados está desequilibrado e quero usar uma super amostragem minoritária para tentar lidar com isso. Idealmente, desejo fazer isso "online", ou seja, não desejo duplicar amostras de dados no disco.
Basicamente, o que eu quero fazer é duplicar exemplos individuais (com alguma probabilidade) com base no rótulo. Eu tenho lido um pouco sobre o Control Flow no Tensorflow. E parecetf.cond(pred, fn1, fn2)
é o caminho a percorrer. Estou apenas lutando para encontrar a parametrização correta, poisfn1
efn2
precisaria produzir listas de tensores, onde as listas têm o mesmo tamanho.
Isto é aproximadamente o que eu tenho até agora:
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),])
No entanto, isso gera um erro, como mencionei antes:
ValueError: fn1 and fn2 must return the same number of results.
Alguma ideia?
P.S .: esta é minha primeira pergunta sobre estouro de pilha. Qualquer feedback sobre a minha pergunta é apreciado.