В работе с нейронными сетями часто возникает необходимость изменения
формы тензоров. Библиотека Keras.js предоставляет инструменты для
управления размерностями данных, аналогичные возможностям Keras в
Python. Основные операции — reshape,
expandDims и squeeze — позволяют корректно
подготовить данные для передачи в слои сети и обработки внутри
модели.
reshapeМетод reshape позволяет изменить форму тензора без
изменения его содержимого. Важно понимать, что операция не
копирует данные, а создаёт новый тензор с той же памятью, но
другой интерпретацией структуры.
Синтаксис:
const reshapedTensor = tensor.reshape([newShape]);
newShape — массив, определяющий новую форму тензора.
Одно из значений может быть -1, что означает автоматическое
вычисление этой размерности.Пример использования:
const tensor = KerasJS.Tensor.ones([2, 3]);
const reshaped = tensor.reshape([3, 2]);
console.log(reshaped.shape); // [3, 2]
Особенности:
-1, библиотека автоматически
рассчитает соответствующую размерность, сохраняя количество
элементов.const tensor = KerasJS.Tensor.ones([2, 3, 4]);
const reshaped = tensor.reshape([-1, 4]); // [6, 4]
expandDimsexpandDims добавляет новую ось к существующему тензору.
Эта операция необходима при работе с одномерными или двухмерными
данными, когда слой сети ожидает вход с определённой размерностью.
Синтаксис:
const expandedTensor = tensor.expandDims(axis);
axis — индекс оси, где будет добавлена новая
размерность.Пример использования:
const tensor = KerasJS.Tensor.ones([5]);
const expanded = tensor.expandDims(0);
console.log(expanded.shape); // [1, 5]
Conv2D или LSTM.Особенности:
axis = 0 добавляет размерность в начало.axis = -1 добавляет размерность в конец.squeezeSqueeze выполняет обратную операцию к
expandDims: удаляет оси размерности 1. Это важно для
упрощения тензоров перед вычислениями или визуализацией.
Синтаксис:
const squeezedTensor = tensor.squeeze([axis]);
axis — необязательный параметр. Если не указан, будут
удалены все оси с размерностью 1.Пример использования:
const tensor = KerasJS.Tensor.ones([1, 3, 1, 5]);
const squeezed = tensor.squeeze();
console.log(squeezed.shape); // [3, 5]
Особенности:
Часто reshape, expandDims и
squeeze используются в комбинации для подготовки данных.
Например, при конвертации одномерного сигнала в формат, подходящий для
2D-свёртки:
const signal = KerasJS.Tensor.ones([128]);
const reshaped = signal.reshape([16, 8]); // [16, 8]
const expanded = reshaped.expandDims(0); // [1, 16, 8]
const finalTensor = expanded.expandDims(-1); // [1, 16, 8, 1]
Аналогично, после обработки результата можно использовать
squeeze, чтобы убрать лишние измерения перед визуализацией
или сохранением.
-1 в
reshape, чтобы автоматически вычислять размерность.expandDims для добавления батч-измерения
или каналов.squeeze для очистки тензоров от лишних
единичных измерений, чтобы избежать ошибок при передаче данных в слои
или функции визуализации.Изменение формы тензоров — фундаментальный навык при работе с
Keras.js, обеспечивающий корректное взаимодействие с различными слоями
сети и подготовку данных для обучения и инференса. Понимание работы
reshape, expandDims и squeeze
позволяет уверенно управлять структурой данных, избегая ошибок и повышая
читаемость кода.