【问题标题】:In Jupyter notebook, how can I manually terminate Keras training using a callback and/or widget event?在 Jupyter 笔记本中,如何使用回调和/或小部件事件手动终止 Keras 训练?
【发布时间】:2021-09-29 11:12:43
【问题描述】:

我在 Jupyter 实验室中使用 Keras 来训练模型。

我希望能够手动停止训练并优雅地退出拟合。

现在我可以终止训练的唯一方法是通过 KeyboardInterrupt。

我如何使用 Keras 回调来优雅地终止训练——在某种程度上,我的 Keras 后代码也将在同一个单元格内执行——通过监听 KeyboardInterrupt 或接收来自小部件按钮的事件?

或者还有其他方法吗?

谢谢!

另见Does interrupting keras training in a Jupyter notebook save the training?

编辑:

我尝试过捕获KeyboardInterrupt(即Jupyter中停止按钮发送的SIGINT),如下:

try:
    history=model.fit(...)
except KeyboardInterrupt:
    pass

但现在我无法在上面的块之后访问history(用于绘图/持久化等)。我应该使用回调在每个(几个)时期编写模型并从文件中加载历史记录,还是有其他方法?

谢谢!

【问题讨论】:

    标签: python keras jupyter jupyter-lab ipywidgets


    【解决方案1】:

    你可以在self.model.stop_training = True 中使用类似的东西

    现在你只需要想办法让if变成真的。

    在这个例子中,它停在一个定义的时期和批量“硬编码”(1和3),为了使其灵活,你可以读取一些本地txt文件的值。

    这意味着在每个批次或每个时期结束时,您的回调将读取一个 txt 文件,如果文件以某种定义的字符串开头,则训练结束。

    class My_Callback(keras.callbacks.Callback):
        def on_epoch_begin(self, epoch, logs={}):
          self.epoch = epoch
    
        def on_batch_end(self, batch, logs={}):
            if self.epoch == 1 and batch == 3:
              print (f"\nStopping at Epoch {self.epoch}, Batch {batch}")
              self.model.stop_training = True
    

    抱歉,我现在没有时间测试所有内容

    【讨论】:

    • 谢谢 - 我喜欢这个想法 - 所以我所要做的就是填充甚至只是触摸文件,如果它在那里,然后采取相应的行动。如果我真的想的话,我可以手动填充文件,或者使用另一个笔记本中的小部件。我想知道小部件是否可以在同一个单元格中 - 会想。
    • 我用一个潜在的问题更新了我的问题 - 也许您可以提供帮助?谢谢!
    猜你喜欢
    • 2019-04-18
    • 2019-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多