【问题标题】:Is there a way to abort a call to model.fit?有没有办法中止对 model.fit 的调用?
【发布时间】:2019-08-26 14:49:32
【问题描述】:

我希望我的网页上有一个按钮来中止正在进行的培训。我意识到提供给 FIT 的回调可能会引发异常,以便在 epoch 或批处理结束时中止,但有没有办法立即中止它?

【问题讨论】:

    标签: tensorflow.js


    【解决方案1】:

    不,无法通过 Tensorflow.js API立即停止训练过程。也就是说,您可以生成自己的进程来运行训练,您可以随时终止。

    使用 Tensorflow.js API

    要中止模型的运行训练,您可以将model.stopTraining 设置为true。 Tensorflow.js 仅在每个批次后检查是否设置了此变量。因此,无法使用 Tensorflow.js API 直接中断训练过程。

    代码示例

    await model.fit(x, y, {
        callbacks: {
            onBatchEnd: (batch, logs) => { // stop after batch
                if (/* ... */) {
                    model.stopTraining = true;
                }
            },
            onEpochEnd: (epoch, logs) => { // stop after epoch
                if (/* ... */) {
                    model.stopTraining = true;
                }
            },
        },
    });
    

    要直接中止训练过程而不等待批处理完成,您必须终止该过程本身。

    通过终止进程终止训练

    终止进程意味着您需要将脚本分成两个单独的部分。一部分是跟踪第一个的“管理”过程,另一部分进行实际培训。

    在浏览器环境中

    在浏览器中,您可以使用 WebWorker 来运行您的训练,然后调用 worker.terminate() 来终止正在运行的进程。但是,在 Web Worker 中开始训练过程并不容易,因为您需要传输数据并使用OffscreenCanvas(使用 WebGL 时)。查看此github issue 了解更多信息。

    使用 Node.js

    在 Node.js 环境中,这更容易。您可以使用child_process.spawn 生成一个进程,并通过调用process.kill 将其终止。您仍然必须为流程提出通信方案,但是由于您的训练流程可以读取数据本身,因此开销应该不会那么大。也就是说,只是停止训练仍然是一项非常复杂的任务。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-10-23
    • 2017-04-16
    • 1970-01-01
    • 2010-11-14
    • 2019-11-17
    • 2021-07-25
    • 1970-01-01
    相关资源
    最近更新 更多