Javascript Tensorflow.js混乱的内存泄漏问题?

Javascript Tensorflow.js混乱的内存泄漏问题?,javascript,tensorflow.js,Javascript,Tensorflow.js,看起来这个程序导致了内存泄漏。执行这个程序时,内存一直增加到2GB和OOM。 我是tfjs的新开发人员,我发现简单的eg会导致我的计算机出现OOM let tf=require("@tensorflow/tfjs"); let leak=()=>{ let model=tf.sequential(); tf.tidy(()=>{ model.add(tf.layers.dense({

看起来这个程序导致了内存泄漏。执行这个程序时,内存一直增加到2GB和OOM。 我是tfjs的新开发人员,我发现简单的eg会导致我的计算机出现OOM

let tf=require("@tensorflow/tfjs");
let leak=()=>{

        let model=tf.sequential();

        tf.tidy(()=>{
            model.add(tf.layers.dense({
                units: 6,
                inputShape: [3]
            }));

        })

        model.dispose();

        console.log(tf.memory().numTensors);
}

let loop=()=>{

    for(let i=0;i<100;i++){
        leak();
    }   

    setTimeout(loop,1);
};

setTimeout(loop,1);
let tf=require(“@tensorflow/tfjs”);
让泄漏=()=>{
设model=tf.sequential();
tf.tidy(()=>{
model.add(tf.layers.dense({
单位:6,,
inputShape:[3]
}));
})
model.dispose();
log(tf.memory().numTensors);
}
让循环=()=>{

对于(设i=0;i没有有效使用张量,因此
tf.memory().numTensors
将返回0,这意味着tf后端没有保存任何数据

即使不考虑使用tfjs,以下代码也会在一段时间后崩溃

let leak = () => {

    console.log("tf.memory().numTensors");
}

let loop = () => {

    for (let i = 0; i < 100; i++) {
        leak();
        console.log('i', i)
    }
  
    setTimeout(loop, 1);
};

setTimeout(loop, 1);
let leak=()=>{
log(“tf.memory().numTensors”);
}
让循环=()=>{
for(设i=0;i<100;i++){
泄漏();
console.log('i',i)
}
setTimeout(循环,1);
};
setTimeout(循环,1);
事件循环中有两个堆叠的多个回调。这会随着每毫秒调用setTimeout而不断增加。在上面的代码中,使用的内存不是很重要。并且需要更长的时间来注意问题。但是当使用
tf
对象时,堆叠的对象更大


增加执行前的时间,可以允许在下一次回调调用之前执行回调并收集垃圾,或者只会减少事件循环中堆叠的项的数量

没有有效使用张量,因此
tf.memory().numTensors
将返回0,这意味着tf后端没有保存任何数据

即使不考虑使用tfjs,以下代码也会在一段时间后崩溃

let leak = () => {

    console.log("tf.memory().numTensors");
}

let loop = () => {

    for (let i = 0; i < 100; i++) {
        leak();
        console.log('i', i)
    }
  
    setTimeout(loop, 1);
};

setTimeout(loop, 1);
let leak=()=>{
log(“tf.memory().numTensors”);
}
让循环=()=>{
for(设i=0;i<100;i++){
泄漏();
console.log('i',i)
}
setTimeout(循环,1);
};
setTimeout(循环,1);
事件循环中有两个堆叠的多个回调。这会随着每毫秒调用setTimeout而不断增加。在上面的代码中,使用的内存不是很重要。并且需要更长的时间来注意问题。但是当使用
tf
对象时,堆叠的对象更大

增加执行前的时间,可以允许在下一次回调调用之前执行回调并收集垃圾,或者只会减少事件循环中堆叠的项的数量