Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

2.1K
Vistas
tensorflow: Tu entrada se quedó sin datos

Estoy trabajando en un modelo seq2seq keras/tensorflow 2.0. Cada vez que el usuario ingresa algo, mi modelo imprime la respuesta perfectamente bien. Sin embargo, en la última línea de cada respuesta me sale esto:

Usted: ADVERTENCIA: tensorflow: su entrada se quedó sin datos; interrumpir el entrenamiento. Asegúrese de que su conjunto de datos o generador pueda generar al menos los lotes de steps_per_epoch * epochs (en este caso, 2 lotes). Es posible que deba usar la función repetir () al crear su conjunto de datos.

El "Tú:" es mi último resultado, antes de que se suponga que el usuario debe escribir algo nuevo. El modelo funciona totalmente bien, pero supongo que ningún error es bueno, pero no entiendo este error. Dice "interrumpiendo el entrenamiento", sin embargo, no estoy entrenando nada, este programa carga un modelo ya entrenado. Supongo que es por eso que el error no detiene el programa.

En caso de que ayude, mi modelo se ve así:

 intent_model = keras.Sequential([ keras.layers.Dense(8, input_shape=[len(train_x[0])]), # input layer keras.layers.Dense(8), # hidden layer keras.layers.Dense(len(train_y[0]), activation="softmax"), # output layer ]) intent_model.compile(optimizer="adam", loss="categorical_crossentropy", metrics=["accuracy"]) intent_model.fit(train_x, train_y, epochs=epochs) test_loss, test_acc = intent_model.evaluate(train_x, train_y) print("Tested Acc:", test_acc) intent_model.save("models/intent_model.h5")
over 4 years ago · Santiago Trujillo
9 Respuestas
Responde la pregunta

0

Tuve el mismo problema en TF 2.1. Tiene algo que ver con la forma/tipo de la entrada, es decir, la consulta. En mi caso, resolví el problema de la siguiente manera: (Mi modelo toma 3 entradas)

 x = [[test_X[0][0]], [test_X[1][0]], [test_X[2][0]]] MODEL.predict(x)

Producción:

ADVERTENCIA: tensorflow: su entrada se quedó sin datos; interrumpir el entrenamiento. Asegúrese de que su conjunto de datos o generador pueda generar al menos los lotes de steps_per_epoch * epochs (en este caso, 7 lotes). Es posible que deba usar la función repetir () al crear su conjunto de datos.

matriz ([[2.053718]], dtype=float32)

Solución:

 x = [np.array([test_X[0][0]]), np.array([test_X[1][0]]), np.array([test_X[2][0]])] MODEL.predict(x)

Producción:

matriz ([[2.053718]], dtype=float32)

over 4 years ago · Santiago Trujillo Denunciar

0

También tuve una serie de modelos que fallaron con las mismas advertencias al intentar entrenarlos. El conjunto de datos de entrenamiento se crea con tf.keras.preprocessing.image_dataset_from_directory() y se divide 80/20. He creado una variable para intentar no quedarme sin imagen. Usando ResNet50 con mis propias imágenes...

 TRAIN_STEPS_PER_EPOCH = np.ceil((image_count*0.8/BATCH_SIZE)-1) # to ensure that there are enough images for training bahch VAL_STEPS_PER_EPOCH = np.ceil((image_count*0.2/BATCH_SIZE)-1)

pero todavía lo hace. BATCH_SIZE está configurado en 32, por lo que estoy tomando el 80% del número de imágenes y dividiéndolo por 32 y luego quitando 1 para tener un excedente... o eso pensé.

 history = model.fit( train_ds, steps_per_epoch=TRAIN_STEPS_PER_EPOCH, epochs=EPOCHS, verbose = 1, validation_data=val_ds, validation_steps=VAL_STEPS_PER_EPOCH, callbacks=tensorboard_callback)

El error después de 3 horas de procesar una única Época exitosa es:

Época 1/25 374/374 [==============================] - 8133s 22s/paso - pérdida: 7,0126 - precisión : 0.0028 - val_loss: 6.8585 - val_accuracy: 0.0000e+00 Época 2/25 1/374 [.................................. .] - ETA: 0s - pérdida: 6.0445 - precisión: 0.0000e+00ADVERTENCIA:tensorflow:Su entrada se quedó sin datos; interrumpir el entrenamiento. Asegúrese de que su conjunto de datos o generador pueda generar al menos los lotes de steps_per_epoch * epochs (en este caso, 9350.0 lotes). Es posible que deba usar la función repetir () al crear su conjunto de datos.

esto podría ayudar....

 > > print(train_ds) <BatchDataset shapes: ((None, 224, 224, 3), (None,)), types: (tf.float32, tf.int32)> > > print(val_ds) BatchDataset shapes: ((None, 224, 224, 3), (None,)),types: (tf.float32, tf.int32)> > > print(TRAIN_STEPS_PER_EPOCH) > 374.0 > > print(VAL_STEPS_PER_EPOCH) > 93.0
over 4 years ago · Santiago Trujillo Denunciar

0

También obtuve esto mientras entrenaba un modelo en google colab, y la razón fue que no hay suficiente memoria/RAM para almacenar la cantidad de datos por lote (si está usando un lote), así que después de bajar el tamaño del lote, todo funcionó perfectamente.

over 4 years ago · Santiago Trujillo Denunciar

0

Para asegurarse de que tiene " al menos steps_per_epoch * epochs ", establezca steps_per_epoch en

 steps_per_epoch = len(X_train)//batch_size validation_steps = len(X_test)//batch_size # if you have validation data

Puede ver el número máximo de lotes que model.fit() puede tomar en la barra de progreso cuando se interrumpe el entrenamiento:

 5230/10000 [==============>...............] - ETA: 2:05:22 - loss: 0.0570

Aquí, el máximo sería 5230 - 1

Es importante tener en cuenta que, de forma predeterminada, batch_size es 32 en model.fit() .

Si está utilizando un tf.data.Dataset , también puede agregar el método repeat() , pero tenga cuidado: se repetirá indefinidamente (a menos que especifique un número).

over 4 years ago · Santiago Trujillo Denunciar

0

Tuve el mismo problema y al disminuir los pasos de validación de 50 a 10 resolví el problema.

over 4 years ago · Santiago Trujillo Denunciar

0

La solución que funcionó para mí fue establecer drop_remainder=True al generar el conjunto de datos. Esto maneja automáticamente cualquier dato adicional que quede.

Por ejemplo:

 dataset = tf.data.Dataset.from_tensor_slices((images, targets)) \ .batch(12, drop_remainder=True)
over 4 years ago · Santiago Trujillo Denunciar

0

Entiendo que está completamente bien. En primer lugar. es una advertencia no un error. En segundo lugar, la situación es similar a que se entrena un dato durante una época, la próxima época entrena los siguientes datos y ha establecido un valor de época demasiado alto, por ejemplo, 500 (suponiendo que el tamaño de sus datos no es fijo, pero será aproximadamente <= 500). Supongamos que el tamaño de los datos es 480. Ahora, la época restante no tiene datos para procesar, de ahí la advertencia. Como resultado, vuelve al estado reciente cuando se entrenaron los últimos datos. Espero que esto ayude. Déjame saber si el concepto es mal entendido. ¡Gracias!

over 4 years ago · Santiago Trujillo Denunciar

0

Intente reducir el valor de steps_per_epoch por debajo del valor que ha establecido actualmente. esto me ayudo a resolver el problema

over 4 years ago · Santiago Trujillo Denunciar

0

Si crea un conjunto de datos con image_dataset_from_directory , elimine los parámetros steps_per_epoch y validation_steps de model.fit .

La razón es que los pasos se iniciaron cuando batch_size pasó a image_dataset_from_directory , y puede intentar obtener el número de pasos con len .

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda