亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Tensorflow.js 中的內存泄漏:如何清理未使用的張量?

Tensorflow.js 中的內存泄漏:如何清理未使用的張量?

慕婉清6462132 2021-06-22 15:08:05
我正在編寫一個腳本,它有時會泄漏張量。這可能在多種情況下發生,例如當我訓練神經網絡時,但訓練崩潰了。在這種情況下,訓練被中斷并且不會正確地處理張量。這會導致內存泄漏,我試圖通過處理未使用的張量來清理它。例子在下面的片段中,我正在訓練兩個(非常簡單的)模型。第一次運行將起作用并且不會導致張量泄漏(訓練前的張量數 = 訓練后的張量數)。第二次,我reshape在訓練期間使用無效層強制崩潰。因此,會拋出錯誤,并且數據集中的張量(我猜?)將不會被正確處理。該代碼是展示張量可能如何泄漏的示例。async function train(shouldCrash) {  console.log(`Training, shouldCrash=${shouldCrash}`);  const dataset = tf.data.zip({ // setup data    xs: tf.data.array([[1],[1]]),    ys: tf.data.array([1]),  }).batch(1);  const model = tf.sequential({ // setup model    layers: [      tf.layers.dense({units: 1, inputShape: [1]}),      tf.layers.reshape({targetShape: [(shouldCrash ? 2 : 1)]}), // use invalid shape when crashing    ],  });  model.compile({ optimizer: 'sgd', loss: 'meanSquaredError' });  console.log('  Tensors before:', tf.memory().numTensors);  try {    const history = await model.fitDataset(dataset, { epochs: 1 });  } catch (err) {    console.log(`    Error: ${err.message}`);  }  console.log('  Tensors after:', tf.memory().numTensors);}(async () => {  await train(false); // normal training  await train(true); // training with error})();<script src="https://cdn.jsdelivr.net/npm/@tensorflow/[email protected]/dist/tf.min.js"></script>問題有tf.tidy, 在某些情況下可以幫助我處理未使用的張量,但它只能用于同步函數調用。因此,在調用await model.fitDataset(...).有沒有辦法處理任何未使用的張量?或者,有沒有辦法處理頁面上所有現有的張量(無需重新加載)?
查看完整描述

2 回答

?
慕運維8079593

TA貢獻1876條經驗 獲得超5個贊

清除異步代碼中任何未使用的張量的方法是在 startScope() 和 endScope() 調用之間包裝創建它們的代碼。


tf.engine().startScope()

// do your thing

tf.engine().endScope()


查看完整回答
反對 回復 2021-06-24
  • 2 回答
  • 0 關注
  • 372 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號