TensorFlow.js предоставляет мощный инструмент для интерактивной визуализации данных и моделей — библиотеку tfjs-vis. Она позволяет наблюдать за процессом обучения нейронных сетей, исследовать веса слоёв, визуализировать функции потерь и метрики, а также работать с распределениями данных. Основная задача tfjs-vis — облегчить анализ и отладку моделей прямо в браузере.
Для использования tfjs-vis в проекте необходимо добавить библиотеку через CDN или npm:
// Через CDN
<script src="https://cdn.jsdelivr.net/npm/@tensorflow/tfjs-vis"></script>
// Через npm
npm install @tensorflow/tfjs-vis
После подключения можно обращаться к объекту tfvis,
который содержит все методы визуализации.
Одной из ключевых задач при обучении нейронной сети является
отслеживание функции потерь и метрик точности. Tfjs-vis
предоставляет функцию show.history для визуализации
динамики обучения:
const metrics = ['loss', 'acc'];
await model.fit(xs, ys, {
epochs: 50,
validationSplit: 0.2,
callbacks: tfvis.show.fitCallbacks(
{ name: 'Обучение модели' },
metrics,
{ height: 300, callbacks: ['onEpochEnd'] }
)
});
Ключевые моменты:
fitCallbacks автоматически создает интерактивный график
по каждой эпохе.metrics указывает, какие метрики
отображать.callbacks позволяет настроить момент
обновления графика (например, onEpochEnd).Для анализа структуры нейронной сети и распределения весов каждого
слоя используется tfvis.show.modelSummary и
tfvis.show.layer:
// Отображение сводки модели
tfvis.show.modelSummary({ name: 'Сводка модели' }, model);
// Визуализация весов первого слоя
const layer = model.getLayer(undefined, 0);
tfvis.show.layer({ name: 'Первый слой' }, layer);
Особенности визуализации весов:
model.getLayer(index) возвращает слой модели по индексу
или имени.Dense) отображается тепловая карта
весов, для сверточных (Conv2D) — визуализация
фильтров.Tfjs-vis поддерживает построение интерактивных графиков для анализа данных и распределений:
const data = [
{ x: 1, y: 2 },
{ x: 2, y: 3 },
{ x: 3, y: 5 }
];
tfvis.render.scatterplot(
{ name: 'Распределение данных' },
{ values: data },
{ xLabel: 'X', yLabel: 'Y', height: 300 }
);
Особенности:
render.histogram для изучения
распределения весов или активаций.Для глубокого анализа нейронной сети полезно визуализировать активации промежуточных слоёв:
const layerOutputs = model.layers.map(layer => layer.output);
const activationModel = tf.model({ inputs: model.input, outputs: layerOutputs });
const activations = activationModel.predict(tf.tensor([inputData]));
activations.forEach((activation, i) => {
tfvis.show.image({ name: `Активации слоя ${i}` }, activation.squeeze());
});
Особенности:
squeeze() используется для удаления лишних измерений,
чтобы корректно отобразить изображения.Tfjs-vis поддерживает гибкую настройку графиков:
tfvis.render.linechart(
{ name: 'Функция потерь' },
{ values: lossValues, series: ['train', 'val'] },
{
xLabel: 'Эпоха',
yLabel: 'Потеря',
width: 400,
height: 300,
zoomToFit: true
}
);
Основные параметры:
xLabel, yLabel — подписи осей.width, height — размеры графика.zoomToFit — масштабирование под размер данных.При больших моделях с десятками слоёв удобнее использовать циклы для автоматической визуализации:
model.layers.forEach((layer, i) => {
tfvis.show.layer({ name: `Слой ${i}: ${layer.name}` }, layer);
});
Это позволяет создавать панель визуализации, где все слои отображены последовательно, облегчая отладку и анализ сети.
Tfjs-vis может быть встроен в интерфейсы на базе HTML и CSS. Элементы графиков создаются в контейнерах, например:
<div id="charts-container"></div>
tfvis.visor().surface({ name: 'Графики', tab: 'Обучение', styles: { width: 600 } });
visor() управляет панелью визуализации.Tfjs-vis делает возможным полноценный анализ и мониторинг моделей в реальном времени, без необходимости перехода на Python или внешние инструменты. Правильное использование визуализации ускоряет отладку, улучшает понимание работы слоёв и повышает качество создаваемых нейросетей.