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

367
Views
StopIteration: generador_salida = siguiente(salida_generador)

Tengo el siguiente código que reescribo para trabajar en un conjunto de datos a gran escala. Estoy usando el generador de Python para ajustar el modelo a los datos obtenidos lote por lote.

 def subtract_mean_gen(x_source,y_source,avg_image,batch): batch_list_x=[] batch_list_y=[] for line,y in zip(x_source,y_source): x=line.astype('float32') x=x-avg_image batch_list_x.append(x) batch_list_y.append(y) if len(batch_list_x) == batch: yield (np.array(batch_list_x),np.array(batch_list_y)) batch_list_x=[] batch_list_y=[] model = resnet.ResnetBuilder.build_resnet_18((img_channels, img_rows, img_cols), nb_classes) model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy']) val = subtract_mean_gen(X_test,Y_test,avg_image_test,batch_size) model.fit_generator(subtract_mean_gen(X_train,Y_train,avg_image_train,batch_size), steps_per_epoch=X_train.shape[0]//batch_size,epochs=nb_epoch,validation_data = val, validation_steps = X_test.shape[0]//batch_size)

Obtengo el siguiente error:

 239/249 [===========================>..] - ETA: 60s - loss: 1.3318 - acc: 0.8330Exception in thread Thread-1: Traceback (most recent call last): File "/usr/lib/python2.7/threading.py", line 801, in __bootstrap_inner self.run() File "/usr/lib/python2.7/threading.py", line 754, in run self.__target(*self.__args, **self.__kwargs) File "/usr/local/lib/python2.7/dist-packages/keras/utils/data_utils.py", line 560, in data_generator_task generator_output = next(self._generator) StopIteration 240/249 [===========================>..] - ETA: 54s - loss: 1.3283 - acc: 0.8337Traceback (most recent call last): File "cifa10-copy.py", line 125, in <module> validation_steps = X_test.shape[0]//batch_size) File "/usr/local/lib/python2.7/dist-packages/keras/legacy/interfaces.py", line 87, in wrapper return func(*args, **kwargs) File "/usr/local/lib/python2.7/dist-packages/keras/engine/training.py", line 1809, in fit_generator generator_output = next(output_generator) StopIteration

Revisé una pregunta similar publicada aquí , sin embargo, no puedo resolver el error por el que se genera StopIteration.

over 4 years ago · Santiago Trujillo
2 answers
Answer question

0

Los generadores para keras deben ser infinitos:

 def subtract_mean_gen(x_source,y_source,avg_image,batch): while True: batch_list_x=[] batch_list_y=[] for line,y in zip(x_source,y_source): x=line.astype('float32') x=x-avg_image batch_list_x.append(x) batch_list_y.append(y) if len(batch_list_x) == batch: yield (np.array(batch_list_x),np.array(batch_list_y)) batch_list_x=[] batch_list_y=[]

El error ocurre porque Keras intenta obtener un nuevo lote, pero su generador ya llegó a su fin. (Aunque definió un número correcto de pasos, Keras tiene una cola que intentará obtener más lotes del generador incluso si está en el último paso).

Aparentemente, tiene un tamaño de cola predeterminado, que es 10 (la excepción aparece 10 lotes antes del final porque la cola intenta obtener un lote después del final).

over 4 years ago · Santiago Trujillo Report

0

Como indica la pregunta vinculada que proporcionó, Keras Generators tiene que iterar indefinidamente, por lo que puede generar elementos para su capacitación todo el tiempo que desee. Más información sobre eso en este problema de Github.

Para eso, debes hacer algunas modificaciones a tu generador como:

 def subtract_mean_gen(x_source,y_source,avg_image,batch): batch_list_x=[] batch_list_y=[] while 1: #run forever, so you can generate elements indefinitely for line,y in zip(x_source,y_source): x=line.astype('float32') x=x-avg_image batch_list_x.append(x) batch_list_y.append(y) if len(batch_list_x) == batch: yield (np.array(batch_list_x),np.array(batch_list_y)) batch_list_x=[] batch_list_y=[]
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!