Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

373
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda