Построение нейронной сети для визуализации многомерных данных в TensorFlow

Вложения слов и многомерные данные повсеместно используются во многих аспектах исследований глубокого обучения, таких как обработка естественного языка, построение систем рекомендаций. Google в последнее время открыл исходный код проекта встраивания, который работает как интерактивный инструмент совместной визуализации для визуализации многомерных данных. Встраивание работает как навигационная карта от точек до входов данных в евклидовом пространстве. Многие типы больших данных требуют визуализации графиков, нейронных сетей, написания сводок по параметрам весов, функций активации сигмоида и точности моделей машинного обучения.

В этом руководстве мы используем набор данных рукописных цифр MNIST. Более подробное объяснение механизма набора данных рукописных цифр MNIST можно найти на веб-сайте Яна Лекуна. По словам Янна Лекуна.

ФОРМАТ ФАЙЛА IDX

Формат файла IDX - это простой формат векторов и многомерных матриц различных числовых типов.

Базовый формат -

магическое число
размер в измерении 0
размер в измерении 1
размер в измерении 2
… ..
размер в измерении N
данные

Магическое число - это целое число (сначала MSB). Первые 2 байта всегда равны 0.

Третий байт кодирует тип данных:
0x08: байт без знака
0x09: байт со знаком
0x0B: короткий (2 байта)
0x0C: int (4 байта)
0x0D: float (4 байта)
0x0E: double (8 байтов)

4-й байт кодирует количество измерений вектора / матрицы: 1 для векторов, 2 для матриц….

Размеры в каждом измерении представляют собой 4-байтовые целые числа (сначала MSB, с прямым порядком байтов, как в большинстве процессоров сторонних производителей).

Данные хранятся как в массиве C, т.е. индекс в последнем измерении изменяется быстрее всего.

4-й байт кодирует количество измерений вектора / матрицы: 1 для векторов, 2 для матриц….

Размеры в каждом измерении представляют собой 4-байтовые целые числа (сначала MSB, с прямым порядком байтов, как в большинстве процессоров сторонних производителей).

Данные хранятся как в массиве C, то есть индекс в последнем измерении изменяется быстрее всего ».

Несколько фреймворков глубокого обучения измерили тесты с использованием рукописных цифр MNIST. Набор данных MNIST легко доступен для платформы TensorFlow. TensorFlow представляет данные в виде тензоров на графике. Тензоры в большинстве случаев являются представителями данных большой размерности. Набор данных MNIST имеет размеры около Z784. В мире, в котором мы живем, есть только пространство Z3. Следовательно, визуализация данных в 784 измерениях для человеческого глаза - непростая задача. Следовательно, различные методы, такие как анализ основных компонентов или t-распределенное стохастическое соседнее встраивание (t-SN3), могут быть адаптированы для уменьшения проклятия размерности, уменьшения размеров и визуализации данных в пространстве меньшей размерности, интерпретируемом человеческим глазом.

Создание нейронной сети для визуализации тензоров активации скрытого слоя возможно с помощью встроенного проектора TensorBoard. Для этого будут импортированы библиотеки numpy, matplotlib.

Входные данные для этого примера будут взяты из набора рукописных цифр MNIST.

Извлечение MNIST_data / train-images-idx3-ubyte.gz

Извлечение MNIST_data / train-labels-idx1-ubyte.gz

Извлечение MNIST_data / t10k-images-idx3-ubyte.gz

Извлечение MNIST_data / t10k-labels-idx1-ubyte.gz

Размер:

- Учебный набор: 55000

- Набор тестов: 10000

- Набор для валидации: 5000

Гиперпараметры будут указываться извне как постоянные параметры, поскольку они не узнаются нейронными сетями.

Здесь необходимо построить граф, но необходимо определить полностью сверточную нейронную сеть или FC Layer (LeNet) вместе с весами и переменными смещения.

Поскольку вспомогательные функции были активированы, теперь можно создать график:

Сеанс интерактивного графа будет запущен в записной книжке Jupyter после выполнения следующего кода:

После выполнения кода отображается точность обучения нейронной сети.

Training epoch: 1
iter   0:       Loss=2.28,    Training Accuracy=37.0%
iter 100:       Loss=0.45,    Training Accuracy=85.0%
iter 200:       Loss=0.21,    Training Accuracy=95.0%
iter 300:       Loss=0.34,    Training Accuracy=89.0%
iter 400:       Loss=0.29,    Training Accuracy=90.0%
iter 500:       Loss=0.18,    Training Accuracy=97.0%
---------------------------------------------------------
Epoch: 1, validation loss: 0.21, validation accuracy: 94.1%
---------------------------------------------------------
Training epoch: 2
iter   0:       Loss=0.14,    Training Accuracy=97.0%
iter 100:       Loss=0.19,    Training Accuracy=94.0%
iter 200:       Loss=0.11,    Training Accuracy=95.0%
iter 300:       Loss=0.06,    Training Accuracy=99.0%
iter 400:       Loss=0.08,    Training Accuracy=96.0%
iter 500:       Loss=0.12,    Training Accuracy=97.0%
---------------------------------------------------------
Epoch: 2, validation loss: 0.14, validation accuracy: 96.0%
---------------------------------------------------------
Training epoch: 3
iter   0:       Loss=0.16,    Training Accuracy=96.0%
iter 100:       Loss=0.15,    Training Accuracy=96.0%
iter 200:       Loss=0.08,    Training Accuracy=97.0%
iter 300:       Loss=0.11,    Training Accuracy=94.0%
iter 400:       Loss=0.10,    Training Accuracy=96.0%
iter 500:       Loss=0.09,    Training Accuracy=97.0%
---------------------------------------------------------
Epoch: 3, validation loss: 0.11, validation accuracy: 96.7%
---------------------------------------------------------
Training epoch: 4
iter   0:       Loss=0.03,    Training Accuracy=100.0%
iter 100:       Loss=0.04,    Training Accuracy=99.0%
iter 200:       Loss=0.11,    Training Accuracy=94.0%
iter 300:       Loss=0.05,    Training Accuracy=98.0%
iter 400:       Loss=0.11,    Training Accuracy=97.0%
iter 500:       Loss=0.11,    Training Accuracy=95.0%
---------------------------------------------------------
Epoch: 4, validation loss: 0.09, validation accuracy: 97.2%
---------------------------------------------------------
Training epoch: 5
iter   0:       Loss=0.11,    Training Accuracy=97.0%
iter 100:       Loss=0.04,    Training Accuracy=98.0%
iter 200:       Loss=0.04,    Training Accuracy=100.0%
iter 300:       Loss=0.02,    Training Accuracy=100.0%
iter 400:       Loss=0.11,    Training Accuracy=97.0%
iter 500:       Loss=0.04,    Training Accuracy=99.0%
---------------------------------------------------------
Epoch: 5, validation loss: 0.08, validation accuracy: 97.7%
---------------------------------------------------------
Training epoch: 6
iter   0:       Loss=0.04,    Training Accuracy=100.0%
iter 100:       Loss=0.07,    Training Accuracy=98.0%
iter 200:       Loss=0.08,    Training Accuracy=98.0%
iter 300:       Loss=0.04,    Training Accuracy=99.0%
iter 400:       Loss=0.04,    Training Accuracy=99.0%
iter 500:       Loss=0.05,    Training Accuracy=97.0%
---------------------------------------------------------
Epoch: 6, validation loss: 0.07, validation accuracy: 97.9%
---------------------------------------------------------
Training epoch: 7
iter   0:       Loss=0.04,    Training Accuracy=99.0%
iter 100:       Loss=0.03,    Training Accuracy=99.0%
iter 200:       Loss=0.07,    Training Accuracy=99.0%
iter 300:       Loss=0.06,    Training Accuracy=98.0%
iter 400:       Loss=0.13,    Training Accuracy=96.0%
iter 500:       Loss=0.07,    Training Accuracy=97.0%
---------------------------------------------------------
Epoch: 7, validation loss: 0.07, validation accuracy: 97.8%
---------------------------------------------------------
Training epoch: 8
iter   0:       Loss=0.03,    Training Accuracy=99.0%
iter 100:       Loss=0.01,    Training Accuracy=100.0%
iter 200:       Loss=0.03,    Training Accuracy=99.0%
iter 300:       Loss=0.02,    Training Accuracy=100.0%
iter 400:       Loss=0.02,    Training Accuracy=100.0%
iter 500:       Loss=0.05,    Training Accuracy=98.0%
---------------------------------------------------------
Epoch: 8, validation loss: 0.07, validation accuracy: 97.8%
---------------------------------------------------------
Training epoch: 9
iter   0:       Loss=0.04,    Training Accuracy=99.0%
iter 100:       Loss=0.01,    Training Accuracy=100.0%
iter 200:       Loss=0.07,    Training Accuracy=98.0%
iter 300:       Loss=0.03,    Training Accuracy=99.0%
iter 400:       Loss=0.03,    Training Accuracy=99.0%
iter 500:       Loss=0.09,    Training Accuracy=97.0%
---------------------------------------------------------
Epoch: 9, validation loss: 0.07, validation accuracy: 97.9%
---------------------------------------------------------
Training epoch: 10
iter   0:       Loss=0.02,    Training Accuracy=100.0%
iter 100:       Loss=0.03,    Training Accuracy=100.0%
iter 200:       Loss=0.02,    Training Accuracy=100.0%
iter 300:       Loss=0.02,    Training Accuracy=100.0%
iter 400:       Loss=0.01,    Training Accuracy=100.0%
iter 500:       Loss=0.01,    Training Accuracy=100.0%

---------------------------------------------------------
Epoch: 10, validation loss: 0.07, validation accuracy: 98.1%
---------------------------------------------------------

Учитывая, что набор данных содержит около 10 000 выборок, скрытый слой в нейронной сети насчитывает около 200 узлов. Выходные данные тензора имеют около 10 000 x 200 слоев.

Цель этого кода - визуализировать многомерные данные в низкоразмерном виде, чтобы сделать их интерпретируемыми человеческим глазом. Метаданные можно загрузить в metadata.tsv с TensorBoard, где может храниться индекс и метка для отдельных образцов. Этот файл необходимо добавить в конфигурацию встраивания точек. Файл.

Запуск сеанса в Jupyter Notebook оценит тензор для встраиваний и сохранит данные.

Я поделился кодом на GitHub на GPSingularity:

После выполнения сеанса его теперь можно визуализировать в TensorBoard с помощью следующей команды:

tensorboard –logdir = logs / embedding / –host localhost Данные будут отображаться в TensorBoard следующим образом. Результаты программы

Эта программа, которую я написал, вдохновлена ​​встроенной визуализацией Easy TensorFlow http://www.easy-tensorflow.com/.

Я поделился своей программой на Github с GPSingularity.

использованная литература

Easy TensorFlow (2018). Легкий TensorFlow. Получено с http://www.easy-tensorflow.com/

Смилков Д., Торат Н., Николсон К., Рейф Э., Виегас Ф. Б. и Ваттернберг М. (2016). Встраивающий проектор: интерактивная визуализация и интерпретация вложений. Источник https://arxiv.org/pdf/1611.05469v1.pdf