ONNX Runtime Web (ORT Web) предоставляет высокопроизводительную
платформу для выполнения моделей машинного обучения непосредственно в
браузере или в Node.js. Ключевым аспектом работы с моделями является
подготовка входных данных в формате тензоров, которые
библиотека принимает для вычислений. В JavaScript для этого используется
объект ort.Tensor.
Тензор в ONNX Runtime Web определяется как объект, содержащий три основных свойства:
type) – указывает на
формат элементов, например, float32, int32 или
int64.dims) – массив чисел, задающий
размерность тензора.data) – одномерный массив
значений соответствующего типа.Синтаксис создания тензора выглядит следующим образом:
const tensor = new ort.Tensor(type, data, dims);
type – строка, определяющая тип данных элементов.data – массив элементов (Float32Array,
Int32Array, BigInt64Array).dims – массив чисел, например [2, 3] для
двумерного тензора 2×3.Float32Array используется для представления тензоров с
числами с плавающей точкой одинарной точности. Это стандартный тип для
большинства нейросетей, включая модели классификации изображений и
регрессии.
Пример создания двумерного тензора:
const data = new Float32Array([1.0, 2.0, 3.0, 4.0, 5.0, 6.0]);
const dims = [2, 3];
const tensorFloat = new ort.Tensor('float32', data, dims);
Особенности работы:
data должен совпадать с произведением
элементов массива dims (2×3 = 6 в примере).Float32Array автоматически интерпретируются
как 32-битные числа с плавающей точкой.Int32Array применяют для целочисленных входов и
индексов, часто используемых в задачах классификации, NLP и при работе с
масками.
Пример создания тензора:
const dataInt = new Int32Array([0, 1, 2, 3]);
const dimsInt = [2, 2];
const tensorInt = new ort.Tensor('int32', dataInt, dimsInt);
Особенности работы:
data не соответствует type.BigInt64Array предназначен для представления 64-битных
целых чисел, что особенно важно для моделей, которые работают с большим
диапазоном значений, превышающим 32-битное целое.
Пример создания тензора:
const dataBigInt = new BigInt64Array([1n, 2n, 3n, 4n]);
const dimsBigInt = [2, 2];
const tensorBigInt = new ort.Tensor('int64', dataBigInt, dimsBigInt);
Особенности работы:
BigInt необходимо
использовать суффикс n.BigInt64Array обеспечивает корректную
обработку больших чисел без потери точности.Перед созданием тензора рекомендуется проверять следующие условия:
const expectedLength = dims.reduce((a, b) => a * b, 1);
if (data.length !== expectedLength) {
throw new Error(`Несоответствие размеров: массив содержит ${data.length} элементов, ожидается ${expectedLength}`);
}
float32 → Float32Arrayint32 → Int32Arrayint64 → BigInt64ArrayНесоблюдение этих правил приведет к исключению во время инициализации или выполнения модели.
Хотя ORT Web поддерживает TypedArray (Float32Array,
Int32Array, BigInt64Array), можно использовать
обычные массивы JavaScript. В этом случае ORT Web автоматически
конвертирует их в соответствующий тип:
const dataJS = [1, 2, 3, 4];
const tensorFromJS = new ort.Tensor('float32', new Float32Array(dataJS), [2, 2]);
Однако для больших массивов рекомендуется использовать TypedArray напрямую, чтобы избежать дополнительного копирования и ускорить работу.
Float32Array — стандарт для чисел с плавающей
точкой.Int32Array — удобен для целочисленных входов и
индексов.BigInt64Array — необходим для 64-битных целых чисел,
особенно при работе с большими идентификаторами.Использование этих подходов позволяет корректно и эффективно формировать входные тензоры для ONNX Runtime Web, обеспечивая стабильное выполнение моделей и точность вычислений.