Preproceso de un tensor de tensor en Numpy

He configurado una CNN en Tensorflow donde leo mis datos con un TFRecordReader. Funciona bien, pero me gustaría hacer más preprocesamiento y aumento de datos de lo que ofrecen las funciones tf.image . Me gustaría específicamente hacer una escala aleatoria.

¿Es posible procesar un tensor de Tensorflow en Numpy? ¿O necesito soltar el TFRecordReader y prefiero hacer todo mi preprocesamiento en Numpy y alimentar datos con el feed_dict? Sospecho que el método feed_dict es lento cuando se entrena en imágenes, ¿pero podría estar equivocado?

Si pudiera crear una tubería de E / S personalizada que recupere resultados intermedios de TensorFlow utilizando uno o más subprocesos, aplique una lógica de Python arbitraria y luego los envíe a una cola para su posterior procesamiento. El progtwig resultante sería algo más complicado, pero le sugiero que consulte el CÓMO de subprocesos y colas para obtener información sobre cómo comenzar.


Existe una característica experimental que podría hacer esto más fácil, si instala desde la fuente .

Si ya ha creado una tubería de preprocesamiento utilizando las operaciones TensorFlow, la forma más fácil de agregar un código Python personalizado es usar el operador tf.py_func() , que toma una lista de objetos Tensor , y una función Python que mapea uno o más NumPy matrices a una o más matrices NumPy.

Por ejemplo, digamos que tienes una tubería como esta:

 reader = tf.TFRecordReader(...) image_t = tf.image.decode_png(tf.parse_single_example(reader.read(), ...)) 

… podría usar tf.py_func() para aplicar algún procesamiento NumPy personalizado de la siguiente manera:

 from scipy import ndimage def preprocess(array): # `array` is a NumPy array containing. return ndimage.rotate(array, 45) image_t = tf.py_func(preprocess, [image_t], [tf.float32])