2016-04-01 6 views
4

Я пытаюсь написать сеть с одним слоем. Когда он начинает обучать через model.fit, в какой-то случайной эпохи он будет бросать следующее сообщение об ошибке:Keras ValueError: операция ввода-вывода в закрытом файле

ValueError: I/O operation on closed file

Вот как я использую model.fit

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

Пожалуйста, дайте мне знать, если вы имеют какие-либо мысли или сталкиваются с одной и той же проблемой.

Благодаря

Вот полный вывод ошибки:

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 
+3

Устранена ли проблема, если вы измените свой подробный уровень на verbose = 0? См. Https://github.com/fchollet/keras/issues/2110 –

ответ

6

Как уже упоминалось в комментариях вопрос (не видел пока только сейчас), это на самом деле из-за ошибки в IPython/Jupyter IO и как он обрабатывает подробный вывод от Keras. Вы можете отключить отчетность, установив verbose=False на методы train и predict или predict_proba, которые вызываются на модели в качестве обходного пути в среднем, или просто запустите модель за пределами ноутбука.

Существует issue on the Keras Github, что суммирует проблему.

5

У меня такая же проблема, и теперь она исправлена. Установив verbose = 2 в model.fit, вы можете решить эту проблему. В документе Keras для model.fit вы можете найти это: «verbose: 0 для отсутствия входа в stdout, 1 для ведения журнала выполнения, 2 для одной строки журнала за эпоху». Установка verbose = 2 будет обновлять прогресс после каждой эпохи и помогает уменьшить объем информации о регистрации, выводимой на экран, что, по моему мнению, вызвало проблему с закрытым IO. Некоторые люди предлагают установить verbose = 0, чтобы отключить вывод, но в этом случае мы не можем отслеживать прогресс. Надеюсь, это поможет решить вашу проблему.

+0

Не могли бы вы продумать правильное форматирование? – manetsus

 Смежные вопросы

  • Нет связанных вопросов^_^