以下行导致内存泄漏。
await tf.browser.toPixels(val, temp);
val
是尺寸为img_size * img_size
的数组,而temp
是画布。没有设置一个张量。由于它是异步调用,因此不能放在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);