Работа с многомерными массивами данных в TensorFlow.js требует умения
управлять формой тензоров. Операции изменения формы позволяют
адаптировать данные под требования модели, упрощают вычисления и
повышают читаемость кода. Ключевыми функциями для изменения формы
являются reshape, expandDims и
squeeze.
reshapeФункция reshape используется для изменения размеров
существующего тензора без изменения его данных. Она создаёт новый тензор
с указанной формой.
Синтаксис:
tf.reshape(tensor, shape)
Параметры:
tensor — исходный тензор.shape — массив чисел, определяющий новую форму. Один из
элементов может быть -1, что позволяет TensorFlow
автоматически вычислить размер соответствующего измерения.Примеры:
const x = tf.tensor([1, 2, 3, 4, 5, 6]);
const reshaped = tf.reshape(x, [2, 3]);
// Результат: [[1, 2, 3], [4, 5, 6]]
const autoReshape = tf.reshape(x, [3, -1]);
// Результат: [[1, 2], [3, 4], [5, 6]]
Особенности:
-1 позволяет гибко изменять форму, не
вычисляя размер измерения вручную.expandDimsФункция expandDims добавляет новое измерение в тензор,
что часто требуется при подготовке данных для нейронных сетей. Чаще
всего используется для добавления оси батча или канала.
Синтаксис:
tf.expandDims(tensor, axis)
Параметры:
tensor — исходный тензор.axis — позиция, где будет добавлено новое измерение (по
умолчанию 0).Примеры:
const x = tf.tensor([1, 2, 3]);
const expanded = tf.expandDims(x, 0);
// Результат: [[1, 2, 3]] (форма [1, 3])
const expandedEnd = tf.expandDims(x, 1);
// Результат: [[1], [2], [3]] (форма [3, 1])
Особенности:
squeezeФункция squeeze удаляет оси размерности 1 из тензора,
упрощая его структуру. Часто применяется для удаления лишнего измерения
после операций вроде expandDims или векторазации
данных.
Синтаксис:
tf.squeeze(tensor, axis)
Параметры:
tensor — исходный тензор.axis — необязательный параметр, массив индексов осей,
которые нужно удалить. Если не указан, удаляются все оси размерности
1.Примеры:
const x = tf.tensor([[1, 2, 3]]);
const squeezed = tf.squeeze(x);
// Результат: [1, 2, 3] (форма [3])
const x2 = tf.tensor([[[1], [2], [3]]]);
const squeezedAxis = tf.squeeze(x2, [2]);
// Результат: [[1, 2, 3]] (форма [1, 3])
Особенности:
axis позволяет точно контролировать,
какие размерности будут удалены.Подготовка данных для модели:
reshape([batchSize, height, width, channels]).expandDims(tensor, -1) для
grayscale изображений.Преобразование выходов модели:
squeeze(output, [1]).Совмещение с другими операциями:
reshape после конкатенации или
транспонирования для приведения к нужной форме.reshape и требуют внимательного подсчёта
элементов.expandDims и
squeeze позволяет гибко управлять размерностью, облегчая
интеграцию с моделями разной архитектуры.