В TensorFlow.js веса модели представляют собой тензоры, которые определяют поведение нейронной сети. Каждый слой сети хранит свои веса и смещения, которые обновляются в процессе обучения методом обратного распространения ошибки. Работа с весами включает следующие ключевые операции:
layer.getWeights() возвращает массив тензоров, где первый
элемент — веса, а второй — смещения (если они есть).layer.setWeights(weightsArray) позволяет программно задать
новые значения весов, где weightsArray — массив тензоров
той же формы, что и оригинальные веса.Весовые коэффициенты определяют, как входные данные преобразуются на каждом слое, поэтому точное управление весами критично для настройки модели и анализа её поведения.
Сравнение весов часто используется для:
Для визуализации весов применяются методы преобразования тензоров в
массивы JavaScript с помощью tensor.array() или
tensor.dataSync(). Это позволяет строить графики, выводить
статистику или выполнять сравнение:
const weights1 = model1.layers[0].getWeights()[0].dataSync();
const weights2 = model2.layers[0].getWeights()[0].dataSync();
const differences = weights1.map((w, i) => w - weights2[i]);
const maxDifference = Math.max(...differences.map(Math.abs));
Такое сравнение позволяет оценить максимальные отклонения весов между моделями и выявить слои с наибольшими изменениями.
Выходы нейронных сетей, также называемые активациями, демонстрируют реакцию сети на конкретный вход. В TensorFlow.js их можно получить с помощью создания промежуточной модели:
const layerOutputs = model.layers.map(layer => layer.output);
const activationModel = tf.model({inputs: model.input, outputs: layerOutputs});
const activations = activationModel.predict(inputTensor);
Основные аспекты анализа активаций:
[batch, height, width, channels].Сравнение выходов двух моделей или двух итераций обучения помогает определить, как обучение влияет на активации. Например, можно вычислять разности активаций:
const diffActivations = activations1.map((act, i) =>
tf.sub(act, activations2[i])
);
const maxDiff = diffActivations.map(t => t.max().dataSync()[0]);
Это дает количественное представление о том, какие слои изменились сильнее всего.
В некоторых задачах требуется сопоставить веса и активации для анализа влияния конкретных параметров на выход. Например:
Для детального анализа применяются техники нормализации и стандартные меры расстояния:
tf.tidy() для освобождения памяти при
работе с большим количеством тензоров, особенно при сравнении
слоев.Такой подход позволяет не только визуализировать обучение, но и делать количественные выводы о стабильности и чувствительности сети.