gpt4 book ai didi

python-3.x - Keras - 基于用户输入的 EarlyStopping

转载 作者:行者123 更新时间:2023-12-03 00:25:01 24 4
gpt4 key购买 nike

我想知道是否有一种简单的方法可以创建一种基于用户输入而不是监视任何特定指标来触发 Keras 提前停止的方法。

即,我想向执行训练的进程发送键盘信号,以便它脱离 fit_generator 函数并执行剩余的代码。

有什么想法吗?

编辑:根据@AnkurGoel的回答,我编写了以下代码:

# Monitors the SIGINT (ctrl + C) to safely stop training when it is sent
flag = False
class TerminateOnFlag(Callback):
"""Callback that terminates training when the flag is raised.
"""
def on_batch_end(self, batch, logs=None):
if flag:
self.model.stop_training = True

def handler(signum, frame):
logging.info('SIGINT signal received. Training will finish after this epoch')
global flag
flag = True

signal.signal(signal.SIGINT, handler) # We assign a specific handler for the SIGINT signal
terminateOnFlag = TerminateOnFlag()
callbacks.append(terminateOnFlag)

其中callbacks是我输入到fit_generator的回调列表。

在训练期间,当我发送 SIGINT 信号时,我确实收到了消息 SIGINT signal returned。训练将在这个纪元之后完成,但是当纪元结束时什么也不会发生。这是怎么回事?

最佳答案

您可以考虑采用以下方法:

使用一个全局变量,初始化0使用信号处理程序,

当python进程收到信号(中断)时,其值从0变为1。

在 Keras 中使用自定义回调,当此变量值更改时停止训练

    class TerminateOnFlag(Callback):
"""Callback that terminates training when flag=1 is encountered.
"""

def on_batch_end(self, batch, logs=None):
if flag==1:
self.model.stop_training = True

原始回调可在以下位置获得: https://github.com/keras-team/keras/blob/master/keras/callbacks.py#L251

您仍然需要检查是否可以向 fit_generator 提供自定义回调,而不是标准回调。

这是信号处理程序的代码:

对于 Windows:

    import signal, os

def handler(signum, frame):
print('Signal handler called with signal', signum)
raise OSError("Couldn't open device!")

signal.signal(signal.CTRL_C_EVENT, handler) # only in python version 3.2

对于 Linux:

    import signal, os

def handler(signum, frame):
print('Signal handler called with signal', signum)
raise OSError("Couldn't open device!")

signal.signal(signal.SIGINT, handler)

关于python-3.x - Keras - 基于用户输入的 EarlyStopping,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53915771/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com