【问题标题】:Keras ValueError: I/O operation on closed fileKeras ValueError:对已关闭文件的 I/O 操作
【发布时间】:2016-07-21 22:16:17
【问题描述】:

我正在尝试编写单层网络。当它开始通过model.fit 训练时,在某个随机时期它会抛出以下错误:

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

【问题讨论】:

标签: python neural-network theano keras


【解决方案1】:

正如问题 cmets(直到现在才看到)中提到的,这实际上是由于 IPython/Jupyter IO 中的一个错误以及它如何处理来自 Keras 的详细输出。您可以通过在模型上调用的trainpredictpredict_proba 方法上设置verbose=False 来禁用报告,同时作为一种解决方法,或者只是在笔记本之外运行模型。

有一个issue on the Keras Github 总结了这个问题。

【讨论】:

    【解决方案2】:

    我遇到了同样的问题,现在已经解决了。通过在 model.fit 中设置 verbose = 2 可以帮助解决这个问题。在 Model.fit 的 Keras 文档中,您可以找到以下内容:“详细:0 表示不记录到标准输出,1 表示进度条记录,2 表示每个时期一个日志行。”。设置 verbose = 2 将在每个 epoch 后更新进度,并有助于减少输出到屏幕的日志信息量,我猜这会导致 IO 关闭问题。有些人建议设置 verbose = 0 以禁用输出,但在这种情况下我们无法跟踪进度。我希望这也能帮助您解决问题。

    【讨论】:

      猜你喜欢
      • 2013-09-27
      • 2015-07-20
      • 1970-01-01
      • 1970-01-01
      • 2018-12-18
      • 2016-08-26
      • 2016-06-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多