В TensorFlow.js метод predict используется для
выполнения инференса — процесса предсказания на основе
обученной модели. Он является ключевым инструментом для извлечения
информации из нейронных сетей после обучения. Метод принимает на вход
тензоры или массивы данных, а возвращает предсказанные значения в виде
тензоров.
const predictions = model.predict(inputTensor);
inputTensor должен соответствовать форме входных данных
модели. Если модель ожидает вход размером
[batchSize, features], то необходимо формировать тензор
именно такой размерности.
predict поддерживает несколько форматов:
SavedModel или TF.js Layers.Пример для модели с несколькими входами:
const predictions = model.predict([tensorA, tensorB]);
Именованный формат:
const predictions = model.predict({input1: tensorA, input2: tensorB});
Метод возвращает тензор или массив тензоров, в зависимости от структуры модели. Если модель имеет один выход — возвращается один тензор, если несколько — массив тензоров.
Для преобразования предсказаний в удобный для анализа формат
используется метод .dataSync() или
.array():
const outputArray = predictions.dataSync();
.dataSync() возвращает синхронный массив,
.array() — промис, который асинхронно возвращает данные в
виде вложенных массивов JavaScript.
Правильная подготовка данных является критически важной для корректного предсказания:
[batchSize, features].float32, но может
отличаться в зависимости от модели.Пример подготовки одного входа:
const inputArray = [0.5, 0.2, 0.1];
const inputTensor = tf.tensor2d([inputArray], [1, 3], 'float32');
predict поддерживает
batch-предсказания, что позволяет обрабатывать
несколько примеров одновременно:
const batchInput = tf.tensor2d([[0.1, 0.2, 0.3], [0.4, 0.5, 0.6]], [2, 3]);
const batchPredictions = model.predict(batchInput);
Преимущества использования batch:
Предсказания можно напрямую использовать для визуализации результатов:
const predictions = model.predict(inputTensor);
predictions.array().then(array => {
console.log("Предсказанные значения:", array);
});
Для изображений чаще всего используется
tf.browser.fromPixels:
const imgTensor = tf.browser.fromPixels(imageElement)
.resizeNearestNeighbor([224, 224])
.toFloat()
.expandDims();
const predictions = model.predict(imgTensor);
Error: Input shape mismatch означают, что форма тензора не
совпадает с ожидаемой.predict
сработает, но предсказания будут случайными.dispose(), чтобы избежать утечек памяти:inputTensor.dispose();
predictions.dispose();
.array() нужно
использовать await или .then(), иначе можно
получить неполные данные.predict с последовательными и функциональными моделямиПоследовательные модели (Sequential):
const model = tf.sequential();
model.add(tf.layers.dense({units: 4, inputShape: [3]}));
model.add(tf.layers.dense({units: 1}));
const inputTensor = tf.tensor2d([[0.1, 0.2, 0.3]]);
const prediction = model.predict(inputTensor);
Функциональные модели (Functional API) позволяют объединять несколько входов и выходов:
const inputA = tf.input({shape: [3]});
const inputB = tf.input({shape: [2]});
const merged = tf.layers.concatenate().apply([inputA, inputB]);
const output = tf.layers.dense({units: 1}).apply(merged);
const model = tf.model({inputs: [inputA, inputB], outputs: output});
const pred = model.predict([tf.tensor2d([[0.1, 0.2, 0.3]]), tf.tensor2d([[0.5, 0.6]])]);
После получения тензора можно выполнять постобработку:
argMax()
для выбора класса с наибольшей вероятностью.predictions.dataSync()[0].Пример с классификацией:
const predictions = model.predict(inputTensor);
const predictedClass = predictions.argMax(-1).dataSync()[0];
tf.tidy() для автоматического
освобождения промежуточных тензоров:tf.tidy(() => {
const predictions = model.predict(inputTensor);
// Работа с predictions
});
Метод predict в TensorFlow.js обеспечивает гибкий,
высокопроизводительный способ выполнения инференса на моделях любого
типа, от простых dense-сетей до сложных функциональных архитектур с
несколькими входами и выходами. Правильная подготовка данных и
управление памятью критически важны для стабильной и точной работы.