When I make a prediction, the tensors increase and consume memory, even though I use dispose(), the tensors do not stop increasing. Can anyone tell me what’s wrong with my endpoint?
app.post('/prediction', async (req, res) => {
const { input, output } = req.body;
const newInput = input.map(num => {
if (num >= 1 && num <= 7) {
return 1;
} else if (num >= 8 && num <= 14) {
return 2;
}
});
try {
const queryLoadModel = `SELECT data FROM models WHERE id = 2`;
db.query(queryLoadModel, async (err, results) => {
if (err) {
console.error('Erro ao carregar o modelo:', err);
res.status(500).send('Erro ao carregar o modelo');
return;
}
if (results.length === 0) {
res.status(404).send('Modelo não encontrado');
return;
}
const modelData = JSON.parse(JSON.parse(results[0].data));
const model = await tf.models.modelFromJSON(modelData);
const inputTensor = tf.tensor2d([newInput], [1, newInput.length]);
const outputTensor = tf.tensor2d([output], [1, output.length]);
model.compile({
optimizer: tf.train.adam(),
loss: 'categoricalCrossentropy',
metrics: ['accuracy']
});
await model.fit(inputTensor, outputTensor, {
epochs: 5
});
const modelJSON = model.toJSON();
const modelString = JSON.stringify(modelJSON);
const querySaveModel = `INSERT INTO models (id, data) VALUES (2, ${db.escape(modelString)}) ON DUPLICATE KEY UPDATE data = VALUES(data)`;
db.query(querySaveModel, err => {
if (err) {
console.error('Erro ao salvar o modelo no banco de dados:', err);
res.status(500).send('Erro ao salvar o modelo');
return;
}
});
const prediction = model.predict(inputTensor);
if (inputTensor) inputTensor.dispose();
if (outputTensor) outputTensor.dispose();
prediction.array().then(array => {
res.send({ prediction: array[0] });
console.log(tf.memory());
prediction.dispose();
}).catch(error => {
console.error('Erro ao processar a previsão:', error);
res.status(500).send('Erro ao processar a previsão');
prediction.dispose();
});
});
} catch (error) {
console.error('Erro ao fazer previsão:', error);
res.status(500).send('Erro interno');
}
});