¿Cómo filtrar el tensor de la cola en función de algún predicado en TensorFlow? -- tensorflow camp Relacionados El problema

How to filter tensor from queue based on some predicate in tensorflow?


5
vote

problema

Español

¿Cómo puedo filtrar los datos almacenados en una cola usando una función de predicado? Por ejemplo, digamos que tenemos una cola que almacena tensores de características y etiquetas, y solo necesitamos aquellos que cumplan con el predicado. Probé la siguiente implementación sin éxito:

  feature, label = queue.dequeue() if (predicate(feature, label)):     enqueue_op = another_queue.enqueue(feature, label)   
Original en ingles

How can I filter data stored in a queue using a predicate function? For example, let's say we have a queue that stores tensors of features and labels and we just need those that meet the predicate. I tried the following implementation without success:

feature, label = queue.dequeue() if (predicate(feature, label)):     enqueue_op = another_queue.enqueue(feature, label) 
  

Lista de respuestas

8
 
vote
vote
La mejor respuesta
 

La forma más sencilla de hacer esto es de desesuar un lote, ejecútelos a través de la prueba de predicado, use tf.where Para producir un vector denso de los que coinciden con el predicado, y use tf.gather para recoger los resultados, y enquea ese lote. Si desea que eso suceda automáticamente, puede iniciar un corredor de colas en la segunda cola, la forma más fácil de hacerlo es usar tf.train.batch :

Ejemplo:

  import numpy as np import tensorflow as tf  a = tf.constant(np.array([5, 1, 9, 4, 7, 0], dtype=np.int32))  q = tf.FIFOQueue(6, dtypes=[tf.int32], shapes=[]) enqueue = q.enqueue_many([a]) dequeue = q.dequeue_many(6) predmatch = tf.less(dequeue, [5]) selected_items = tf.reshape(tf.where(predmatch), [-1]) found = tf.gather(dequeue, selected_items)  secondqueue = tf.FIFOQueue(6, dtypes=[tf.int32], shapes=[]) enqueue2 = secondqueue.enqueue_many([found]) dequeue2 = secondqueue.dequeue_many(3) # XXX, hardcoded  with tf.Session() as sess:   sess.run(tf.global_variables_initializer())   sess.run(enqueue)  # Fill the first queue   sess.run(enqueue2) # Filter, push into queue 2   print sess.run(dequeue2) # Pop items off of queue2   

El predicado produce un vector booleano; El tf.where Produce un vector denso de los índices de los valores verdaderos, y el tf.gather recopila elementos de su tensor original basado en esos índices.

Muchas cosas están codificadas con codificación dura en este ejemplo de que tendría que hacer que no sea codificado en realidad en realidad, sino que, con suerte, muestra la estructura de lo que está tratando de hacer (crear un oleoducto). En la práctica, querrías que los queuernunners hay que mantener las cosas batiendo automáticamente. El uso de tf.train.batch es muy útil para manejarlo automáticamente: consulte Threading y colas para más detalles.

 

The most straightforward way to do this is to dequeue a batch, run them through the predicate test, use tf.where to produce a dense vector of the ones that match the predicate, and use tf.gather to collect the results, and enqueue that batch. If you want that to happen automatically, you can start a queue runner on the second queue - the easiest way to do that is to use tf.train.batch:

Example:

import numpy as np import tensorflow as tf  a = tf.constant(np.array([5, 1, 9, 4, 7, 0], dtype=np.int32))  q = tf.FIFOQueue(6, dtypes=[tf.int32], shapes=[]) enqueue = q.enqueue_many([a]) dequeue = q.dequeue_many(6) predmatch = tf.less(dequeue, [5]) selected_items = tf.reshape(tf.where(predmatch), [-1]) found = tf.gather(dequeue, selected_items)  secondqueue = tf.FIFOQueue(6, dtypes=[tf.int32], shapes=[]) enqueue2 = secondqueue.enqueue_many([found]) dequeue2 = secondqueue.dequeue_many(3) # XXX, hardcoded  with tf.Session() as sess:   sess.run(tf.global_variables_initializer())   sess.run(enqueue)  # Fill the first queue   sess.run(enqueue2) # Filter, push into queue 2   print sess.run(dequeue2) # Pop items off of queue2 

The predicate produces a boolean vector; the tf.where produces a dense vector of the indexes of the true values, and the tf.gather collects items from your original tensor based upon those indexes.

A lot of things are hardcoded in this example that you'd need to make not-hardcoded in reality, of course, but hopefully it shows the structure of what you're trying to do (create a filtering pipeline). In practice, you'd want QueueRunners on there to keep things churning automatically. Using tf.train.batch is very useful to handle that automatically -- see Threading and Queues for more detail.

 
 
     
     

Relacionados problema

5  Cómo implementar la pérdida de bisagras de clase múltiple en TensorFlow  ( How to implement multi class hinge loss in tensorflow ) 
Quiero implementar la pérdida de bisagras de clase múltiple en TensorFlow. La formulación es la siguiente: Me resulta difícil obtener la segunda probabil...

0  OOT al asignar tensor con forma [1,48,48,1024] y tipo flotador en / trabajo: localhost / réplica: 0 / Tarea: 0 / Dispositivo: GPU: 0 por alocator GPU_0_BFC  ( Oom when allocating tensor with shape1 48 48 1024 and type float on joblocal ) 
Estoy tratando de reproducir el entrenamiento de la máscara RCNN en el siguiente repositorio: https: //github.com/maxkferg/metal-defect-detection El fragm...

0  ¿Los logés y etiquetas de ValueError deben tener la misma forma (?, 10) vs (2,2,?, 10)  ( Valueerror logits and labels must have the same shape 10 vs 2 2 10 ) 
Quiero actualizar una red neuronal simple usando 2 células LSTM. Arquitectura antigua (que funcionó): entrada = & gt; Rnn = & gt; Producción Nueva arquitectur...

9  ¿Cómo implementar una multiplicación de matriz en KERAS?  ( How to implement a matrix multiplication in keras ) 
Solo quiero implementar una función que dada una matriz X devuelve la matriz de covarianza de x (x ^ t * x), que es solo una simple multiplicación de matriz. ...

1  ValueError: no se puede remodelar la matriz de tamaño 1048576 en forma (1024,1024,3)  ( Valueerror cannot reshape array of size 1048576 into shape 1024 1024 3 ) 
El siguiente es un fragmento de código de un archivo .ipynb. for image_path in TEST_IMAGE_PATHS: print(image_path) image = Image.open(image_path) p...

3  Tiempo de inicio de KERAS (_Make_Train_Function ()) Muy lento en la GPU de Tesla V100-SXM2-16GB, en comparación con la GPU menos potente  ( Keras startup time make train function very slow on tesla v100 sxm2 16gb gp ) 
Seguimiento hasta: KERAS CON TENSORFLOW EN LA MÁQUINA DE GPU: algunas partes son muy lentas ejecutando mnist_cnn.py (ligeramente modificado - principalmen...

0  Gancho de tensorflow después_run no llamado  ( Tensorflow hook after run not called ) 
Entonces, estoy mirando esto ejemplo de Google y ellos Hacer uso de una supervisión, que parece una clase realmente conveniente para ahorrar resúmenes cada ...

2  ¿Cómo implementar correctamente el Fit_Generator de KERAS en múltiples conjuntos de datos?  ( How to correctly implement kerass fit generator on multiple datasets ) 
Estoy teniendo un problema implementando la función FIT_GEERATOR de KERAS. He seguido la documentación de Keras y la documentación de muchas otras documentaci...

0  ¿Cómo registrar los valores de un tensor durante el entrenamiento en KERAS?  ( How to record the values of a tensor during training in keras ) 
Tengo una capa personalizada en Keras, y quiero monitorear un tensor específico durante la capacitación (es decir, evaluar este tensor por época y registrar e...

1  TensorFlow Detección de objetos Modelo entrenado no funciona  ( Tensorflow object detection trained model not working ) 
He capacitado mi conjunto de datos para detección de objetos TensorFlow utilizando tanto SSD como un modelo R-CNN más rápido. Hubo 220 trenes y 30 imágenes de...




© 2022 respuesta.top Reservados todos los derechos. Centro de preguntas y respuestas reservados todos los derechos