В TensorFlow.js работа с многомерными массивами данных осуществляется
с помощью объектов tf.Tensor. Эффективная
обработка данных часто требует изменения формы тензоров, перестановки их
осей и транспонирования. Эти операции являются фундаментальными при
подготовке данных для нейронных сетей, особенно при работе с
изображениями, последовательностями и многомерными признаковыми
пространствами.
Транспонирование меняет местами две оси тензора. В случае матриц (2D-тензоров) это сведение к стандартной операции транспонирования, где строки становятся столбцами.
const a = tf.tensor2d([[1, 2, 3], [4, 5, 6]]);
const aT = a.transpose();
aT.print();
Результат будет:
[[1, 4],
[2, 5],
[3, 6]]
Ключевые моменты:
transpose() по умолчанию меняет
местами последние две оси тензора.perm:const b = tf.tensor3d([
[[1, 2], [3, 4]],
[[5, 6], [7, 8]]
]);
const bT = b.transpose([0, 2, 1]);
bT.print();
Пояснение:
b имеет форму
[2, 2, 2].[0, 2, 1] означает, что первая ось остаётся,
третья становится второй, вторая становится третьей.Для сложных тензоров с более чем двумя измерениями
tf.transpose() с параметром
perm позволяет полностью управлять перестановкой осей. В
отличие от reshape(), который меняет только форму,
перестановка осей меняет физическое расположение данных.
const c = tf.tensor4d([1,2,3,4,5,6,7,8], [2, 2, 1, 2]);
const cPerm = c.transpose([0, 3, 2, 1]);
cPerm.print();
Особенности:
perm. Каждый индекс
соответствует исходной оси.Изображения обычно представлены в формате
[batch, height, width, channels]. Некоторые модели требуют
формат [batch, channels, height, width]. Транспонирование
позволяет преобразовать данные без копирования каждого элемента
вручную:
const images = tf.randomNormal([32, 28, 28, 3]); // batch=32, H=28, W=28, C=3
const imagesTransposed = images.transpose([0, 3, 1, 2]);
[0, 3, 1, 2] означает: batch остаётся на месте, каналы
становятся второй осью, высота и ширина меняются местами.Для тензоров размерности 3 и выше транспонирование может комбинироваться с операциями агрегации:
const t = tf.tensor3d([
[[1, 2], [3, 4]],
[[5, 6], [7, 8]]
]); // форма [2,2,2]
const tT = t.transpose([1, 0, 2]);
tT.print();
reshape: иногда
эффективнее сначала изменить форму, а затем переставить оси.perm: для
высокоразмерных тензоров правильная последовательность осей критична для
корректной обработки данных.reshape и
transpose| Операция | Изменяет порядок данных | Изменяет форму | Использование |
|---|---|---|---|
reshape() |
Нет | Да | Упрощение структуры тензора без изменения данных |
transpose() |
Да | Да | Изменение расположения осей для моделей, подготовки данных |
[N, C, H, W] или
[N, H, W, C].Тщательное управление порядком осей обеспечивает корректность и эффективность работы нейронных сетей в TensorFlow.js, особенно в браузере, где ресурсы ограничены.