Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

700
Views
¿Cómo puedo filtrar tf.data.Dataset por valores específicos?

Creo un conjunto de datos leyendo los TFRecords, mapeo los valores y quiero filtrar el conjunto de datos para valores específicos, pero dado que el resultado es un dict con tensores, no puedo obtener el valor real de un tensor ni verificarlo con tf.cond() / tf.equal . ¿Cómo puedo hacer eso?

 def mapping_func(serialized_example): feature = { 'label': tf.FixedLenFeature([1], tf.string) } features = tf.parse_single_example(serialized_example, features=feature) return features def filter_func(features): # this doesn't work #result = features['label'] == 'some_label_value' # neither this result = tf.reshape(tf.equal(features['label'], 'some_label_value'), []) return result def main(): file_names = ["/var/data/file1.tfrecord", "/var/data/file2.tfrecord"] dataset = tf.contrib.data.TFRecordDataset(file_names) dataset = dataset.map(mapping_func) dataset = dataset.shuffle(buffer_size=10000) dataset = dataset.filter(filter_func) dataset = dataset.repeat() iterator = dataset.make_one_shot_iterator() sample = iterator.get_next()
over 4 years ago · Santiago Trujillo
3 answers
Answer question

0

Estoy respondiendo a mi propia pregunta. ¡Encontré el problema!

Lo que tenía que hacer es tf.unstack() la etiqueta como esta:

 label = tf.unstack(features['label']) label = label[0]

antes de dárselo a tf.equal() :

 result = tf.reshape(tf.equal(label, 'some_label_value'), [])

Supongo que el problema era que la etiqueta se define como una matriz con un elemento de tipo string tf.FixedLenFeature([1], tf.string) , por lo que para obtener el primer y único elemento tuve que desempaquetarlo (lo que crea una lista) y luego obtenga el elemento con índice 0, corríjame si me equivoco.

over 4 years ago · Santiago Trujillo Report

0

Creo que, en primer lugar, no es necesario que haga que la etiqueta sea una matriz unidimensional.

con:

 feature = {'label': tf.FixedLenFeature((), tf.string)}

no necesitará desapilar la etiqueta en su filter_func

over 4 years ago · Santiago Trujillo Report

0

Leer, filtrar un conjunto de datos es muy fácil y no hay necesidad de desapilar nada.

para leer el conjunto de datos:

 print(my_dataset, '\n\n') ##let us print the first 3 records for record in my_dataset.take(3): ##below could be large in case of image print(record) ##let us print a specific key print(record['key2'])

Filtrar es igualmente simple:

 my_filtereddataset = my_dataset.filter(_filtcond1)

donde defines _filtcond1 como quieras. Digamos que hay un indicador booleano 'verdadero' 'falso' en su conjunto de datos, entonces:

 @tf.function def _filtcond1(x): return x['key_bool'] == 1

o incluso una función lambda:

 my_filtereddataset = my_dataset.filter(lambda x: x['key_int']>13)

Si está leyendo un conjunto de datos que no ha creado o no conoce las claves (como parece ser el caso de los OP), puede usar esto para tener una idea de las claves y la estructura primero:

 import json from google.protobuf.json_format import MessageToJson for raw_record in noidea_dataset.take(1): example = tf.train.Example() example.ParseFromString(raw_record.numpy()) ##print(example) ##if image it will be toooolong m = json.loads(MessageToJson(example)) print(m['features']['feature'].keys())

Ahora puede continuar con el filtrado.

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!