ONNX Runtime Web (ORT Web) предоставляет возможность запускать модели машинного обучения непосредственно в браузере с использованием JavaScript. После получения выходных данных модели классификации важным этапом является их корректная постобработка. Наиболее часто применяемыми методами являются softmax, argmax и top-k, обеспечивающие интерпретацию сырых логитов в удобочитаемые вероятности и метки классов.
Softmax — функция активации, которая преобразует набор сырых выходов модели (логитов) в распределение вероятностей. Для каждого элемента вектора ( z_i ) функция вычисляется по формуле:
[ (z_i) = ]
Особенности применения:
Пример реализации softmax на Jav * aScript:
function softmax(logits) {
const maxLogit = Math.max(...logits);
const exps = logits.map(x => Math.exp(x - maxLogit));
const sumExps = exps.reduce((a, b) => a + b, 0);
return exps.map(e => e / sumExps);
}
Сдвиг на maxLogit предотвращает переполнение экспоненты
при больших значениях логитов, что является стандартной практикой
численной стабильности.
Argmax используется для определения индекса класса с наибольшей вероятностью. После применения softmax или непосредственно к логитам, argmax позволяет получить итоговую категорию.
Применение:
Пример реализации argmax на Jav * aScript:
function argmax(array) {
let maxIndex = 0;
let maxValue = array[0];
for (let i = 1; i < array.length; i++) {
if (array[i] > maxValue) {
maxValue = array[i];
maxIndex = i;
}
}
return maxIndex;
}
Это обеспечивает точное определение наиболее вероятного класса без использования сторонних библиотек.
Top-K расширяет идею argmax, возвращая несколько наиболее вероятных классов вместо одного. Этот метод особенно полезен в задачах с большим количеством категорий, где важно знать несколько возможных кандидатов для последующего анализа или визуализации.
Особенности:
K — число возвращаемых наиболее вероятных классов.Пример реализации top-k на Jav * aScript:
function topK(array, k) {
return array
.map((value, index) => ({ index, value }))
.sort((a, b) => b.value - a.value)
.slice(0, k);
}
// Пример использования:
const probabilities = softmax([2.5, 0.3, 2.1, 0.7]);
const top3 = topK(probabilities, 3);
console.log(top3);
Особенности производительности:
После запуска модели в ORT Web через session.run()
полученные выходные данные представляют собой
TypedArray. Для постобработки необходимо:
Пример полного пайплайна:
const session = await ort.InferenceSession.create('model.onnx');
const feeds = { input: new ort.Tensor('float32', inputData, [1, inputSize]) };
const results = await session.run(feeds);
const logits = Array.from(results.output.data);
const probabilities = softmax(logits);
const top5 = topK(probabilities, 5);
console.log(top5);
Этот подход обеспечивает точную и прозрачную интерпретацию результатов модели прямо в браузере, без серверной обработки.
Такая комбинация softmax, argmax и top-k формирует стандартный и эффективный пайплайн постобработки классификационных моделей в ONNX Runtime Web, позволяя корректно интерпретировать результаты и извлекать релевантные классы для дальнейшего использования.