Слои изменения формы: Reshape, Permute, RepeatVector

Reshape

Слой Reshape позволяет изменять форму входных данных без изменения их содержимого. Он крайне полезен при переходе между слоями с различными требованиями к размерности тензоров.

Синтаксис:

const layer = new KerasJS.layers.Reshape({ target_shape: [height, width, channels] });

Параметры:

  • target_shape — массив чисел, задающий новую форму выходного тензора. Важно: произведение всех размерностей нового тензора должно совпадать с количеством элементов во входном тензоре. Например, тензор формы [2, 6] можно преобразовать в [3, 4], но не в [4, 4].

Примеры применения:

  1. Преобразование плоского векторного представления в формат изображения для свёрточного слоя:
const reshapeLayer = new KerasJS.layers.Reshape({ target_shape: [28, 28, 1] });
  1. Подготовка выходных данных LSTM к полносвязному слою:
const reshapeLayer = new KerasJS.layers.Reshape({ target_shape: [64 * 64] });

Особенности:

  • Поддерживает динамическую размерность с использованием -1 для автоматического вычисления одной из осей. Например:
const reshapeLayer = new KerasJS.layers.Reshape({ target_shape: [-1, 32] });

Здесь Keras.js сам вычислит первую размерность так, чтобы количество элементов осталось неизменным.


Permute

Слой Permute выполняет перестановку осей входного тензора. Он применяется, когда порядок размерностей имеет значение, например, при работе с последовательностями или изображениями.

Синтаксис:

const layer = new KerasJS.layers.Permute({ dims: [2, 1, 3] });

Параметры:

  • dims — массив чисел, задающий новый порядок осей. Примечание: нумерация начинается с 1 для первой оси после батча (Keras.js сохраняет размер батча без изменения).

Примеры использования:

  1. Преобразование тензора с формой [batch, timesteps, features] в [batch, features, timesteps]:
const permuteLayer = new KerasJS.layers.Permute({ dims: [2, 1] });
  1. Перестановка каналов изображения:
const permuteLayer = new KerasJS.layers.Permute({ dims: [3, 1, 2] });

Это полезно для согласования формата с требуемым слоем свёртки.

Особенности:

  • Не изменяет количество элементов.
  • Часто используется вместе с Reshape для подготовки данных к LSTM или Conv2D.

RepeatVector

Слой RepeatVector создаёт копии входного вектора по новой оси, превращая одномерный тензор в многомерный. Это позволяет повторять данные для обработки последовательными слоями, такими как LSTM.

Синтаксис:

const layer = new KerasJS.layers.RepeatVector({ n: 10 });

Параметры:

  • n — количество повторений входного вектора вдоль новой оси.

Примеры применения:

  1. Подготовка вектора признаков для LSTM:
const repeatLayer = new KerasJS.layers.RepeatVector({ n: 5 });
// Вход: [batch, features]
// Выход: [batch, 5, features]
  1. Создание последовательности одинаковых элементов для обучения генеративной модели:
const repeatLayer = new KerasJS.layers.RepeatVector({ n: 20 });

Особенности:

  • Сохраняет значения элементов без изменений.
  • Применяется только к двумерным входным данным [batch, features].
  • Отлично сочетается с LSTM для расширения признаков во временную последовательность.

Взаимодействие слоев изменения формы

  • Reshape + Permute: часто используются вместе для преобразования изображений в последовательность или наоборот.
  • RepeatVector + LSTM: позволяет преобразовать вектор признаков в временной ряд одинаковых элементов для обучения рекуррентной сети.
  • Reshape + RepeatVector: можно применять для формирования тензоров сложной структуры перед передачей в многомерные слои.

Использование этих слоев требует внимательного контроля размерностей, так как несоответствие форм приводит к ошибкам во время выполнения модели. Поддержка динамических осей с -1 упрощает работу с изменяемыми входными данными и облегчает создание универсальных архитектур.