Tensor является ключевым объектом для работы с данными в
ONNX Runtime Web. Он представляет собой многомерный массив данных
фиксированного типа, который используется для передачи входных и
получения выходных данных моделей ONNX в среде JavaScript.
TensorКонструктор класса имеет следующую форму:
new ort.Tensor(type, data, dims)
Параметры:
type — строка или константа,
указывающая тип данных элементов тензора. Поддерживаются типы,
соответствующие ONNX, например:
'float32''int32''bool''string' Тип определяет размер памяти, выделяемой под
каждый элемент, и влияет на совместимость с моделью.data — массив данных
(TypedArray или обычный массив JavaScript). Для числовых
типов рекомендуется использовать Float32Array,
Int32Array и другие TypedArray, так как они
обеспечивают эффективное хранение и быстрый доступ к элементам. Длина
массива должна соответствовать произведению размеров, указанных в
dims.
dims — массив целых чисел,
описывающий форму тензора. Например, [3, 224, 224] задаёт
трёхмерный тензор с 3 каналами и размерностью 224×224. Количество
элементов в массиве data должно строго соответствовать
произведению всех значений в dims.
Пример создания тензора:
const data = new Float32Array(3 * 224 * 224);
const tensor = new ort.Tensor('float32', data, [3, 224, 224]);
TensortypeСодержит строковое представление типа данных тензора.
Примеры значений:
tensor.type; // 'float32'
Это поле используется для проверки совместимости с входами и выходами модели, а также для правильного выделения памяти и преобразования данных.
dataХранит сами данные тензора в виде массива. Для числовых типов
предпочтительно использовать TypedArray:
tensor.data[0]; // доступ к первому элементу
tensor.data.length; // количество элементов
Обращение к data напрямую позволяет считывать и
модифицировать значения, применять математические операции, нормализацию
или преобразования перед подачей на модель.
dimsСодержит массив с размерностями тензора:
tensor.dims; // [3, 224, 224]
Используется для интерпретации одномерного массива data
как многомерного массива. Например, при работе с изображениями
dims определяет количество каналов и высоту/ширину
изображения.
dims должно точно соответствовать длине массива
data. Несоответствие приведёт к ошибкам при выполнении
модели.TypedArray ускоряет вычисления и снижает потребление памяти
по сравнению с обычными массивами.type
должен совпадать с ожидаемым типом данных входного или выходного тензора
модели. Попытка передать, например, float32 вместо
int32 может вызвать исключение.Создание входного тензора и подача его в сессию ONNX Runtime Web:
const session = await ort.InferenceSession.create('model.onnx');
const inputTensor = new ort.Tensor('float32', new Float32Array(1 * 3 * 224 * 224), [1, 3, 224, 224]);
const feeds = { input: inputTensor };
const results = await session.run(feeds);
const outputTensor = results.output;
console.log(outputTensor.data.length);
console.log(outputTensor.dims);
В этом примере Tensor используется для передачи данных в
модель и получения выходных значений, демонстрируя, как
type, data и dims взаимодействуют
с ONNX Runtime Web для точного и эффективного обмена данными.