以下行导致内存泄漏。
await tf.browser.toPixels(val, temp);
val
是维度数组 img_size * img_size
而 temp
是一个 Canvas 。没有处理一个张量。由于它是异步调用,因此不能将其放入 tf.tidy()
中。另外根据官方文档 tf.browser.toPixels()
应该返回一个 promise 。那么我们如何处理正在形成的张量呢? (张量的大小 = img_size * img_size *4 )
相关代码:
let val ; //val is an array not a tensor
tf.tidy(()=>{
let values = model.predict(batched).dataSync(); //batched is a tensor
values = Array.from(values);
//scale values
values = values.map(x => x * 255)
val = new Array();
while (values.length > 0) val.push(values.splice(0, image_size));
});
await tf.browser.toPixels(val, temp); //this line causes leak,commenting it fixes it
finalRes.getContext('2d').drawImage(temp, dx, dy);
最佳答案
这是 tfjs
中的一个内部错误。现已修复here
关于javascript - 使用 tf.browser.toPixels() 时内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60678015/