【发布时间】:2020-04-02 22:19:18
【问题描述】:
ModelCheckpoint 可用于根据特定的监控指标保存最佳模型。所以它显然有关于存储在其对象中的最佳指标的信息。例如,如果您在 google colab 上进行培训,您的实例可能会在没有警告的情况下被终止,并且在长时间的培训课程后您会丢失此信息。
我试图腌制 ModelCheckpoint 对象但得到:
TypeError: can't pickle _thread.lock objects
这样当我把笔记本带回来时,我可以重复使用这个相同的对象。有没有好的方法来做到这一点?您可以尝试通过以下方式重现:
chkpt_cb = tf.keras.callbacks.ModelCheckpoint('model.{epoch:02d}-{val_loss:.4f}.h5',
monitor='val_loss',
verbose=1,
save_best_only=True)
with open('chkpt_cb.pickle', 'w') as f:
pickle.dump(chkpt_cb, f, protocol=pickle.HIGHEST_PROTOCOL)
【问题讨论】:
-
你能发布你正在使用的当前代码块吗? ModelCheckpoint 通常是一个回调,因此从您的描述中不清楚您是如何使用它的。
-
@adamconkey 我已经用代码更新了它以重现。这相当简单。我只想腌制回调对象。根据错误,它一定与线程问题有关。
-
我找到的快速答案:Pickle chkpt_cb.best,然后将其重新分配给新的检查点。刚刚试了一下,效果很好。
标签: keras callback pickle google-colaboratory tf.keras