使用tf.browser.toPixels()时发生内存泄漏

时间:2020-03-13 22:30:15

标签: javascript tensorflow tensorflow.js

以下行导致内存泄漏。

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);

2 个答案:

答案 0 :(得分:1)

这是tfjs中的内部错误。现在已修复here

答案 1 :(得分:0)

使用tf.browser.toPixels

后需要显式处理张量
tf.dispose(val)

更多详细信息,请here