Утечка памяти при использовании tf.browser.toPixels () - PullRequest
2 голосов
/ 14 марта 2020

Следующая строка вызывает утечку памяти.

await tf.browser.toPixels(val, temp);

val - это массив измерений img_size * img_size, а temp - это холст. Один тензор не утилизируется. Поскольку это асинхронный вызов, его нельзя поместить в tf.tidy(). Также согласно официальной документации tf.browser.toPixels() должен вернуть обещание. Так как мы можем расположить формирующийся тензор? (Размер тензора = 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);

1 Ответ

0 голосов
/ 16 марта 2020

тензор должен быть явно удален после использования tf.browser.toPixels

tf.dispose(val)

Более подробную информацию можно найти здесь

...