Keras ValueError: Eu operação de E / S em arquivo fechado

votos
4

Eu estou tentando escrever uma única camada de rede. Quando ele começa a treinar através model.fit, em alguma época aleatória ele vai jogar o seguinte erro:

ValueError: I/O operation on closed file

Aqui está como eu estou usando model.fit

my_model = model.fit(train_x, train_y, batch_size=100, nb_epoch=20, show_accuracy=True, verbose=1)

Por favor, deixe-me saber se você tiver quaisquer pensamentos ou está encontrando o mesmo problema.

obrigado

Aqui está o resultado completo do erro:

Epoch 1/20
47900/60816 [======================>.......] - ETA: 3s - loss: 0.1688 - acc: 0.9594
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-4-273f2082a322> in <module>()
     14 model.compile(loss='binary_crossentropy', optimizer='adadelta')
     15 
---> 16 model.fit(train_x, train_y, batch_size=100, nb_epoch=20, show_accuracy=True, verbose=1)
     17 score = model.evaluate(test_x, test_y, show_accuracy=True, verbose=0)
     18 print('Test loss:', score[0])

/usr/local/lib/python2.7/dist-packages/keras/models.pyc in fit(self, X, y, batch_size, nb_epoch, verbose, callbacks, validation_split, validation_data, shuffle, show_accuracy, class_weight, sample_weight)
    699                          verbose=verbose, callbacks=callbacks,
    700                          val_f=val_f, val_ins=val_ins,
--> 701                          shuffle=shuffle, metrics=metrics)
    702 
    703     def predict(self, X, batch_size=128, verbose=0):

/usr/local/lib/python2.7/dist-packages/keras/models.pyc in _fit(self, f, ins, out_labels, batch_size, nb_epoch, verbose, callbacks, val_f, val_ins, shuffle, metrics)
    321                     batch_logs[l] = o
    322 
--> 323                 callbacks.on_batch_end(batch_index, batch_logs)
    324 
    325                 epoch_logs = {}

/usr/local/lib/python2.7/dist-packages/keras/callbacks.pyc in on_batch_end(self, batch, logs)
     58         t_before_callbacks = time.time()
     59         for callback in self.callbacks:
---> 60             callback.on_batch_end(batch, logs)
     61         self._delta_ts_batch_end.append(time.time() - t_before_callbacks)
     62         delta_t_median = np.median(self._delta_ts_batch_end)

/usr/local/lib/python2.7/dist-packages/keras/callbacks.pyc in on_batch_end(self, batch, logs)
    187         # will be handled by on_epoch_end
    188         if self.verbose and self.seen < self.params['nb_sample']:
--> 189             self.progbar.update(self.seen, self.log_values)
    190 
    191     def on_epoch_end(self, epoch, logs={}):

/usr/local/lib/python2.7/dist-packages/keras/utils/generic_utils.pyc in update(self, current, values)
     59             prev_total_width = self.total_width
     60             sys.stdout.write(\b * prev_total_width)
---> 61             sys.stdout.write(\r)
     62 
     63             numdigits = int(np.floor(np.log10(self.target))) + 1

/usr/local/lib/python2.7/dist-packages/ipykernel/iostream.pyc in write(self, string)
    315 
    316             is_child = (not self._is_master_process())
--> 317             self._buffer.write(string)
    318             if is_child:
    319                 # newlines imply flush in subprocesses

ValueError: I/O operation on closed file
Publicado 01/04/2016 em 22:59
fonte usuário
Em outras línguas...                            


2 respostas

votos
6

Como mencionado na pergunta comentários (não ver até agora), este é realmente devido a um bug no IPython / Jupyter IO e como ele lida com a saída detalhada de Keras. Você pode desativar o relatório, definindo verbose=Falsenos traine predictou predict_probamétodos invocados no modelo como uma solução alternativa nesse meio tempo, ou apenas executar o modelo fora do notebook.

Há um problema na Keras Github que resume o problema.

Respondeu 26/04/2016 em 20:45
fonte usuário

votos
5

Eu tenho o mesmo problema e tinha fixado agora. Ao definir detalhado = 2 em model.fit pode ajudar a resolver este problema. No documento Keras para model.fit, você pode encontrar este: "detalhado: 0 para nenhum log para stdout, 1 para o registo de barra de progresso, 2 para uma linha de log por época.". Definir detalhado = 2 irá atualizar o progresso após cada época, e ajudar a reduzir a quantidade de saída de log informações para a tela, que eu acho que causou a IO fechado problema. Algumas pessoas sugerem para definir detalhado = 0 para desativar a saída, mas, nesse caso, não podemos acompanhar o progresso. Espero que isso pode ajudar a resolver o seu problema também.

Respondeu 26/07/2016 em 00:54
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more