Компиляция модели — ключевой этап в процессе работы с нейронными
сетями. В TensorFlow.js метод compile задаёт параметры
обучения, оптимизатор, функцию потерь и метрики, которые будут
использоваться при обучении модели. Без компиляции модель нельзя обучать
с помощью метода fit.
model.compile({
optimizer: 'sgd',
loss: 'meanSquaredError',
metrics: ['accuracy']
});
Параметры метода compile:
'sgd',
'adam') или экземпляром класса оптимизатора
(tf.train.sgd(0.01)).'categoricalCrossentropy' или
'meanSquaredError', либо пользовательская функция
потерь.'accuracy',
'mse', 'mae' и т. д.).TensorFlow.js предоставляет готовые оптимизаторы, реализованные как
методы в tf.train. Наиболее часто используемые:
tf.train.sgd(learningRate)) —
стохастический градиентный спуск, базовый метод оптимизации.tf.train.adam(learningRate)) —
адаптивный оптимизатор с автоматической настройкой скорости
обучения.tf.train.rmsprop(learningRate)) — хорошо работает с
рекуррентными сетями и нестабильными градиентами.Пример использования оптимизатора с заданной скоростью обучения:
const optimizer = tf.train.adam(0.001);
model.compile({
optimizer: optimizer,
loss: 'categoricalCrossentropy',
metrics: ['accuracy']
});
Функция потерь определяет, насколько предсказания модели отклоняются от реальных значений. Основные функции потерь:
meanSquaredError (MSE) —
среднеквадратичная ошибка, часто используется для задач регрессии.meanAbsoluteError (MAE) — средняя
абсолютная ошибка, менее чувствительна к выбросам.categoricalCrossentropy —
кросс-энтропия для задач многоклассовой классификации.binaryCrossentropy — кросс-энтропия
для двоичной классификации.yTrue и
yPred.Пример пользовательской функции потерь:
const customLoss = (yTrue, yPred) => {
return tf.mean(tf.square(tf.sub(yTrue, yPred)));
};
model.compile({
optimizer: 'adam',
loss: customLoss,
metrics: ['mse']
});
Метрики позволяют отслеживать эффективность модели на каждом этапе
обучения. В compile можно использовать как встроенные
метрики ('accuracy', 'mse'), так и собственные
функции:
const customMetric = (yTrue, yPred) => {
return tf.mean(tf.abs(tf.sub(yTrue, yPred)));
};
model.compile({
optimizer: 'sgd',
loss: 'meanSquaredError',
metrics: [customMetric]
});
Последовательная модель
(tf.Sequential) Компиляция применяется ко всей
модели целиком. Пример:
const model = tf.sequential();
model.add(tf.layers.dense({units: 32, inputShape: [10], activation: 'relu'}));
model.add(tf.layers.dense({units: 3, activation: 'softmax'}));
model.compile({
optimizer: 'adam',
loss: 'categoricalCrossentropy',
metrics: ['accuracy']
});Модель с функциональным API
(tf.model) Компиляция работает аналогично, но
часто применяется для сложных архитектур с несколькими входами и
выходами. Можно указать отдельные функции потерь для каждого выхода:
const model = tf.model({inputs: inputLayer, outputs: [output1, output2]});
model.compile({
optimizer: 'adam',
loss: ['meanSquaredError', 'categoricalCrossentropy'],
metrics: [['mse'], ['accuracy']]
});compile требует повторной
компиляции.Компиляция модели в TensorFlow.js обеспечивает основу для корректного обучения нейронной сети, позволяя задавать алгоритмы оптимизации, функции потерь и метрики оценки, что напрямую влияет на качество и эффективность обучения.