Гистограммы весов и активаций являются важным инструментом для анализа и отладки нейронных сетей. Они позволяют визуализировать распределение значений параметров модели и откликов слоёв, что помогает выявлять проблемы с обучением, переобучением или исчезающим/взрывающимся градиентом.
Веса (Weights) — это параметры слоёв, которые обучаются в процессе оптимизации модели. Их распределение может показывать, насколько хорошо сеть обучается, и позволяют диагностировать проблемы, например, слишком малые или слишком большие значения весов.
Активации (Activations) — выходные значения слоёв после применения функции активации. Гистограммы активаций помогают понять, насколько эффективно проходят сигналы через сеть, выявить «мертвые» нейроны или затухающие значения.
В TensorFlow.js модель можно создать с использованием
tf.sequential или tf.model. Пример создания
простой модели:
const model = tf.sequential();
model.add(tf.layers.dense({units: 64, activation: 'relu', inputShape: [100]}));
model.add(tf.layers.dense({units: 10, activation: 'softmax'}));
model.compile({optimizer: 'adam', loss: 'categoricalCrossentropy', metrics: ['accuracy']});
Для извлечения весов используется метод
getWeights():
const weights = model.layers[0].getWeights(); // возвращает массив тензоров
Каждый тензор весов можно конвертировать в массив чисел для построения гистограммы:
const weightsArray = await weights[0].array();
Построение гистограммы весов помогает определить распределение значений и выявить аномалии. Например:
Пример построения гистограммы с использованием сторонней библиотеки
визуализации, например Plotly:
const flattenedWeights = weightsArray.flat();
const trace = {
x: flattenedWeights,
type: 'histogram'
};
Plotly.newPlot('weightHistogram', [trace]);
Для анализа активаций необходимо получить выходные значения слоя для
некоторого входного тензора. В TensorFlow.js это можно сделать через
метод predict и tf.model.predict:
const input = tf.randomNormal([1, 100]);
const activations = model.layers[0].apply(input);
const activationsArray = await activations.array();
Гистограмма активаций позволяет оценить, как распределены значения после функции активации:
TensorFlow.js совместим с tfvis — библиотекой
визуализации данных и моделей. Она позволяет автоматически строить
гистограммы весов и активаций во время обучения:
const surface = { name: 'Layer Weights', tab: 'Model Inspection' };
tfvis.show.layer(model.layers[0], surface);
Также tfvis поддерживает мониторинг распределений во
время тренировки с использованием callback:
await model.fit(xTrain, yTrain, {
epochs: 20,
callbacks: tfvis.show.fitCallbacks(
{ name: 'Training Performance' },
['loss', 'acc'],
{ height: 200, callbacks: ['onEpochEnd'] }
)
});
Это позволяет отслеживать динамику весов и активаций, выявлять проблемы с переобучением или деградацией градиентов.
Гистограммы весов и активаций в TensorFlow.js обеспечивают визуальный контроль над процессом обучения, позволяя быстро диагностировать потенциальные ошибки и улучшать стабильность и эффективность нейронных сетей.