Создание тензоров: скаляры, векторы, матрицы, многомерные массивы

Keras.js — это JavaScript-библиотека, позволяющая выполнять предобученные модели Keras непосредственно в браузере или на Node.js, используя WebGL для ускорения вычислений. Основой работы с ней являются тензоры — структуры данных, которые представляют скаляры, векторы, матрицы и более сложные многомерные массивы.

Скаляры

Скаляры — это тензоры нулевой размерности. Они представляют собой одно единственное значение. В Keras.js скаляры создаются с использованием объекта Float32Array или простого числа при передаче данных в модель.

Пример создания скаляра:

const scalar = new Float32Array([42]);
console.log(scalar); // Float32Array [42]

Скаляры обычно используются для передачи единичных параметров или меток классов в задаче классификации.

Векторы

Векторы — это одномерные тензоры. Они имеют размерность shape = [n], где n — число элементов в векторе. Векторы в Keras.js создаются аналогично скалярам, но с большим количеством элементов.

Пример создания вектора:

const vector = new Float32Array([1.0, 2.0, 3.0, 4.0]);
console.log(vector); // Float32Array [1, 2, 3, 4]

Векторы используются для представления входных данных, таких как признаки объекта, или для вывода модели, например вероятностей классов.

Матрицы

Матрицы — двумерные тензоры с размерностью shape = [rows, cols]. В Keras.js матрицы создаются путем передачи плоского массива и указания размерности в shape.

Пример создания матрицы:

const rows = 2;
const cols = 3;
const matrix = new Float32Array([
  1, 2, 3,
  4, 5, 6
]);

const shape = [rows, cols];
console.log({matrix, shape});
// matrix: Float32Array [1, 2, 3, 4, 5, 6]
// shape: [2, 3]

Матрицы часто применяются для представления батчей данных, где каждая строка — это отдельный объект с набором признаков.

Многомерные массивы (тензоры высокой размерности)

Многомерные тензоры — это массивы с размерностью больше двух, например, shape = [batch, height, width, channels] для изображений. В Keras.js они создаются аналогично матрицам, но с указанием полной размерности.

Пример создания трехмерного тензора:

const depth = 2;
const height = 2;
const width = 3;
const tensor3D = new Float32Array([
  1, 2, 3, 4, 5, 6,
  7, 8, 9, 10, 11, 12
]);
const shape3D = [depth, height, width];
console.log({tensor3D, shape3D});
// tensor3D: Float32Array [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
// shape3D: [2, 2, 3]

Многомерные массивы позволяют работать с изображениями, видео и временными рядами, передавая данные в формате, ожидаемом слоями нейронной сети.

Практическое использование тензоров в Keras.js

Для загрузки и выполнения модели Keras в браузере используется объект KerasJS.Model, который принимает тензоры в виде плоских массивов и их формы:

const model = new KerasJS.Model({
  filepath: 'model.bin',
  gpu: true
});

const inputData = {
  input_1: {
    data: new Float32Array([1, 2, 3, 4]),
    shape: [1, 4]
  }
};

model.ready().then(() => {
  return model.predict(inputData);
}).then(outputData => {
  console.log(outputData);
});

Важно помнить, что данные всегда передаются в плоском виде, а shape определяет реальную структуру тензора. Это ключевой момент при работе с многомерными массивами: внутреннее представление всегда одномерное, а форма задаёт интерпретацию этих данных.

Ключевые моменты

  • Скаляры — нулевая размерность, одно значение.
  • Векторы — одномерные тензоры, shape [n].
  • Матрицы — двумерные тензоры, shape [rows, cols].
  • Многомерные массивы — тензоры с размерностью ≥ 3, shape [d1, d2, ..., dn].
  • Данные всегда передаются плоскими, реальная структура задаётся через shape.
  • Использование Float32Array обеспечивает совместимость с WebGL и ускоряет вычисления.

Создание корректной структуры тензоров — фундаментальный навык для эффективной работы с Keras.js и любого машинного обучения на клиентской стороне.