Форма тензора и понятие rank

Тензор в Keras.js представляет собой многомерный массив чисел, аналогичный массивам в NumPy или TensorFlow.js. Основной характеристикой тензора является его форма (shape), которая определяет размеры каждого измерения массива.

Понятие rank тензора

Rank тензора — это количество измерений (ось) в тензоре. Например:

  • Скаляр имеет rank 0, так как не содержит измерений. Пример: 5
  • Вектор имеет rank 1, например [1, 2, 3]
  • Матрица имеет rank 2, например [[1, 2], [3, 4]]
  • Трёхмерный тензор имеет rank 3, например, набор изображений размером (batch_size, height, width)

Rank тензора всегда целое число ≥ 0 и напрямую связан с длиной массива, который описывает форму:

rank = shape.length

Форма (shape) тензора

Форма тензора — это массив целых чисел, где каждый элемент указывает количество элементов в соответствующем измерении. Примеры:

  • Скаляр: shape = [], rank = 0
  • Вектор длиной 10: shape = [10], rank = 1
  • Матрица 3x4: shape = [3, 4], rank = 2
  • Трёхмерный тензор 5x32x32: shape = [5, 32, 32], rank = 3

Каждое число в форме тензора может быть изменено операциями, такими как reshape или expandDims, что позволяет динамически адаптировать данные под нужды модели.

Основные методы работы с формой в Keras.js

Keras.js работает на основе загруженной модели Keras и использует структуры данных, совместимые с JavaScript. Основные операции с формой тензора включают:

  • Получение формы:
const shape = tensor.shape;
  • Получение rank:
const rank = tensor.rank;
  • Изменение формы (reshape):
const reshapedTensor = tensor.reshape([batchSize, height * width * channels]);
  • Добавление измерения (expandDims):
const expandedTensor = tensor.expandDims(0); // Добавляет измерение в начало
  • Удаление размерности (squeeze):
const squeezedTensor = tensor.squeeze(); // Убирает все размерности 1

Практическое значение формы и rank

  1. Совместимость данных и модели: Входные данные должны соответствовать ожидаемой форме модели. Неправильный rank вызывает ошибки при инференсе.
  2. Обработка пакетов данных (batching): Большинство моделей ожидают вход в виде тензора с rank ≥ 2, где первое измерение — batch size.
  3. Манипуляции с изображениями и последовательностями: Для изображений rank обычно 4 (batch, height, width, channels), а для текстовых последовательностей rank 3 (batch, timesteps, features).
  4. Оптимизация вычислений: Знание формы позволяет корректно использовать слои с фиксированными параметрами, например, Dense или Conv2D, и избегать лишних reshape-операций.

Примеры с Keras.js

// Создание тензора из массива
const tensor = new KerasJS.Tensor([1, 2, 3, 4], [2, 2]); // 2x2
console.log(tensor.shape); // [2, 2]
console.log(tensor.rank);  // 2

// Reshape тензора
const reshaped = tensor.reshape([4, 1]);
console.log(reshaped.shape); // [4, 1]

// Добавление измерения
const expanded = tensor.expandDims(0);
console.log(expanded.shape); // [1, 2, 2]

// Удаление размерности
const squeezed = expanded.squeeze();
console.log(squeezed.shape); // [2, 2]

Важные нюансы

  • Динамический batch size: При построении модели batch размер может быть null в форме, что позволяет модели принимать переменное количество входов.
  • Неизменяемость формы исходного тензора: Методы вроде reshape возвращают новый тензор без изменения исходного.
  • Rank и broadcast: При выполнении операций над тензорами с разным rank, Keras.js использует правила broadcasting, аналогичные NumPy, автоматически расширяя меньший тензор до формы большего.

Форма и rank тензора являются фундаментальными характеристиками данных в Keras.js. Их понимание необходимо для корректного построения, загрузки и инференса моделей в JavaScript. Эти параметры напрямую влияют на архитектуру модели, совместимость данных и производительность вычислений.