【发布时间】:2019-08-26 14:49:32
【问题描述】:
我希望我的网页上有一个按钮来中止正在进行的培训。我意识到提供给 FIT 的回调可能会引发异常,以便在 epoch 或批处理结束时中止,但有没有办法立即中止它?
【问题讨论】:
标签: tensorflow.js
我希望我的网页上有一个按钮来中止正在进行的培训。我意识到提供给 FIT 的回调可能会引发异常,以便在 epoch 或批处理结束时中止,但有没有办法立即中止它?
【问题讨论】:
标签: tensorflow.js
不,无法通过 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 将其终止。您仍然必须为流程提出通信方案,但是由于您的训练流程可以读取数据本身,因此开销应该不会那么大。也就是说,只是停止训练仍然是一项非常复杂的任务。
【讨论】: