Я пишу скрипт, который иногда пропускает тензоры.Это может происходить во многих случаях, например, когда я тренирую нейронную сеть, но тренировка падает.В этом случае обучение прерывается и не удастся правильно расположить тензоры.Это приводит к утечке памяти, которую я пытаюсь устранить, удаляя неиспользуемые тензоры.
Пример
В приведенном ниже фрагменте я тренируюсь два (очень простые) модели.Первый запуск будет работать и приведет к отсутствию утечек тензоров (количество тензоров до тренировки = количество тензоров после тренировки).Во второй раз я использую недопустимый слой 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/tfjs@1.1.2/dist/tf.min.js"></script>
Вопрос
Существует tf.tidy
, который помогает мне в некоторых случаяхизбавиться от неиспользуемых тензоров, но его можно использовать только для синхронных вызовов функций.Поэтому его нельзя использовать при вызове await model.fitDataset(...)
.
. Есть ли способ избавиться от неиспользуемых тензоров?В качестве альтернативы, есть ли способ удалить все существующие тензоры на странице (без перезагрузки)?