Luego de de esta extensa búsqueda de información pudimos resolver este disgusto que tienen algunos de nuestros usuarios. Te regalamos la respuesta y nuestro objetivo es serte de mucha apoyo.
Solución:
len(list(dataset))
funciona en modo impaciente, aunque obviamente no es una buena solución general.
Echa un vistazo aquí: https://github.com/tensorflow/tensorflow/issues/26966
No funciona para conjuntos de datos TFRecord, pero funciona bien para otros tipos.
TL;RD:
num_elements = tf.data.experimental.cardinality(conjunto de datos).numpy()
tf.data.Dataset.list_files
crea un tensor llamado MatchingFiles:0
(con el correspondiente prefix si es aplicable).
podrías evaluar
tf.shape(tf.get_default_graph().get_tensor_by_name('MatchingFiles:0'))[0]
para obtener el número de archivos.
Por supuesto, esto funcionaría solo en casos simples, y en particular si solo tiene una muestra (o un número conocido de muestras) por imagen.
En situaciones más complejas, por ejemplo, cuando no conoce la cantidad de muestras en cada archivo, solo puede observar la cantidad de muestras cuando finaliza una época.
Para hacer esto, puede ver el número de épocas que cuenta su Dataset
. repeat()
crea un miembro llamado _count
, que cuenta el número de épocas. Al observarlo durante sus iteraciones, puede detectar cuándo cambia y calcular el tamaño de su conjunto de datos a partir de ahí.
Este contador puede estar enterrado en la jerarquía de Dataset
s que se crea al llamar a funciones miembro sucesivamente, por lo que tenemos que desenterrarlo así.
d = my_dataset
# RepeatDataset seems not to be exposed -- this is a possible workaround
RepeatDataset = type(tf.data.Dataset().repeat())
try:
while not isinstance(d, RepeatDataset):
d = d._input_dataset
except AttributeError:
warnings.warn('no epoch counter found')
epoch_counter = None
else:
epoch_counter = d._count
Tenga en cuenta que con esta técnica, el cálculo del tamaño de su conjunto de datos no es exacto, porque el lote durante el cual epoch_counter
se incrementa normalmente mezcla muestras de dos épocas sucesivas. Por lo tanto, este cálculo es preciso hasta la longitud de su lote.
Acuérdate de que te brindamos la opción de añadir una estimación correcta si diste con el hallazgo.