Интерактивное развлечение нейронной сети в Excel

Тони Робертс

2 декабря 2019 г. · чтение 8 мин.

Изображение для сообщения

Построение CPPN в Excel с помощью PyTorch и PyXLL

После прочтения Парасом Чопра «Рисование глубоких нейронных сетей», чтобы понять, как они работают, я был вдохновлен на несколько собственных экспериментов. Создаваемые изображения были интригующими, и я хотел поиграть и почувствовать, как они изменились в ответ на изменение структуры нейронной сети.

Я призываю вас вернуться и прочитать оригинал в статье, но вкратце она включает использование сетей создания композиционных паттернов (CPPN) со случайными весами для создания абстрактных изображений. Основная идея состоит в том, что мы создаем функцию c = f (x, y) , которая принимает входные координаты пикселя x, y и возвращает цвет для этого пикселя c с использованием CPPN.

Изображение для сообщения

Изображение через создание абстрактных шаблонов с помощью TensorFlow

Как и в исходной статье, мы ‘ Я буду использовать PyTorch для создания CPPN. Следующий код является результатом большой работы Параса Чопры и будет нашей отправной точкой.

Выполнение вышеуказанного нейронная сеть на входном массиве 512×512 приводит к выходному изображению, как показано ниже. Нейронная сеть инициализируется случайными весами, а входной массив масштабируется таким образом, чтобы каждый вход находился в диапазоне от +0,5 до -0,5.

Изображение для сообщения

Создано с использованием CPPN со случайными весами

Есть много переменных для воспроизведения это повлияет на итоговое изображение. От масштабирования входных данных, количества нейронов на каждом этапе и структуры самой нейронной сети. Мы могли бы поместить этот код в записную книжку Jupyter и использовать там изменения входных данных, но каждое вносимое нами изменение является изменением самого кода и почему-то не совсем похоже на настоящий интерактивный опыт.

Microsoft Excel изначально может показаться странным выбором для интерактивной игровой площадки для такого типа задач.. Потерпите меня… Что мы хотим сделать, так это ввести некоторую информацию, такую ​​как количество весов и количество слоев, и представить нам новое изображение. По сути, Excel просто запускает функции при изменении входных данных — и эти функции могут делать все, что угодно, даже показывать нам изображение в Excel! Если бы у нас был рабочий лист в Excel с параметрами, которые мы хотим изменить, и как только мы внесем изменения, у нас будет обновление изображения, которое стало бы отличной площадкой для понимания того, как вводимые данные влияют на вывод.

Нейронные сети в Excel могут показаться сложной задачей, но мы не говорим о ее реализации в VBA! Фактически, нам не нужно приближаться к VBA, поскольку мы можем продолжать использовать вместо него Python.

PyXLL — это надстройка Excel, которая встраивает среду выполнения Python в Microsoft Excel. Это позволяет нам писать функции Excel полностью на Python, и поэтому мы все еще можем использовать PyTorch для нашей нейронной сети, но все в пределах Excel. Доступ ко всем инструментам Python действительно открывает возможности Excel. Вместо того, чтобы иметь сложную логику, закодированную в VBA, программное обеспечение, написанное на Python, просто отображается в Excel. Excel становится нашим внешним инструментом пользовательского интерфейса, а Python берет на себя сложные вычисления.

PyXLL — это самый эффективный и простой способ писать функции Excel полностью на Python, который идеально подходит для сложных рабочих нагрузок. Вы можете загрузить бесплатную 30-дневную пробную версию со страницы https://www.pyxll.com/download.html.

Наша цель — создать нашу нейронную сеть в Excel и получить полный контроль над входы. Мы начнем с написания некоторых функций Python и представления их в Excel. Грубо говоря, нам понадобятся следующие функции:

  1. Создание слоев (nn.Linear, nn.Tanh и nn.Sigmoid)
  2. Create нейронная сеть из набора слоев (nn.Sequential)
  3. Запустить нейронную сеть на наборе входов и показать результат

На этом Возможно, вам интересно, как мы собираемся представить некоторые из этих элементов в Excel. PyXLL позволяет передавать объекты Python между функциями Excel в книге, поэтому иметь функцию, которая возвращает экземпляр Python nn.Linear или другую функцию Python, которая принимает список слоев преобразования, на самом деле очень просто. Когда объект Python возвращается в Excel, то, что мы видим в Excel, является просто дескриптором объекта Python, и когда этот дескриптор передается другой функции Python, PyXLL автоматически выбирает объект для этого дескриптора. PyXLL также управляет жизненным циклом этих объектов, поэтому, когда они больше не нужны, они будут очищаться автоматически.

Чтобы предоставить функцию Python в Excel, мы используем декоратор @xl_func из модуля pyxll. Вот первые функции, которые нам понадобятся для создания слоев:

Отображение функций PyTorch в Excel

Декоратор @xl_func — это все, что нужно, чтобы предоставить эти функции Excel! Функция nn_Linear имеет аннотации типов, которые PyXLL использует для обеспечения передачи правильных типов из Excel в функцию, в противном случае числа, переданные из Excel, могут передаваться как числа с плавающей запятой.

Все, что нужно, — это добавить это в конфигурационный файл PyXLL, pyxll.cfg. Например, если ваш код был записан в модуль Python с именем «pytorch_abstract_art.py» в папке «C: MyCode PyTorch-Abstract-Art Modules», вы должны обновить свой файл pyxll.cfg со следующими настройками:

 [PYTHON] 
pythonpath =
C: MyCode PyTorch-Abstract-Art Modules [PYXLL]
modules =
pytorch_abstract_art

Теперь мы можем вызывать эти функции из Excel для создания всех слоев, необходимых для нейронной сети. Все входные данные вводятся в Excel, и мы даже можем изменить количество и порядок слоев в интерактивном режиме.

Изображение для сообщения

Для построения нейронной сети нам просто нужна другая функция, которая берет эти слои и возвращает нейронную сеть. используя nn.Sequential. PyXLL может принимать массивы аргументов, а также только отдельные значения, поэтому мы можем передавать весь набор слоев как один аргумент. Декоратор @xl_func принимает необязательную функцию signature , чтобы сообщить PyXLL больше об ожидаемом аргументе и возвращаемых типах.

Чтобы сообщить PyXLL о преобразовании переданного диапазона ячеек к нему в 1-й список объектов мы используем тип object [] . Если бы мы хотели передать диапазон как двумерный список списков объектов, вместо этого мы могли бы использовать тип object [] [] . При сведении 2d диапазона ячеек к 1d списку значений PyXLL берет ячейки слева направо, поэтому порядок наших слоев на изображении выше приведет к правильному расположению.

Теперь мы можем добавить эту новую функцию nn_Sequential на наш рабочий лист Excel и передать слои, созданные ранее.

Изображение для сообщения

Теперь остается только создать набор входных данных, инициализировать веса и показать полученное изображение.

Для этого мы будем использовать объектную модель Excel для управления изображением в Excel.. Объектная модель Excel — это именно то, что вы, возможно, использовали, если когда-либо писали VBA, но вы, возможно, не осознавали, что ее можно вызывать из Python так же легко, как из VBA! Руководство Python как замена VBA объясняет, как вызвать Excel из Python, а также описывает некоторые различия между синтаксисом VBA и Python.

Последняя функция принимает:

  1. Объект нейронной сети
  2. Имя объекта изображения в Excel
  3. Параметры масштабирования и смещения для входных данных
  4. Случайное начальное число

Чтобы добавить изображение, которое покажет наш результат, в Excel щелкните Разработчик Вставить → I маг (Active X Control) . Слева от строки формул вы увидите имя объекта изображения. По умолчанию это будет Image1 , но вы можете изменить его на любое имя, которое вам нравится.

Следующий код получает изображение из Excel, конструирует входные данные, вычисляет выводит и обновляет изображение.

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

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

Изображение для сообщения

Пара функций была исключена из приведенного выше кода, чтобы его было легче читать. Вы можете найти их ниже, или вы также можете получить весь код из репозитория GitHub https://github.com/pyxll/pyxll-examples в папке pytorch.

Поиграть с нейронными сетями в Excel таким образом было действительно интересно и весело. Что еще более важно, он показывает, как даже сложные задачи Python могут быть легко интегрированы в Excel.

Сильная сторона Excel — это инструмент пользовательского интерфейса, и, на мой взгляд, его не следует использовать для хранения данные, алгоритмы или бизнес-логика, которыми можно лучше управлять в другом месте. Любой, кто какое-то время использовал Excel или работал с командой, зависящей от Excel, знает о том, какие проблемы вызывают макросы VBA, которые нельзя тестировать, контролировать версии или даже согласовывать между рабочими книгами разных пользователей. Перенося код за пределы Excel, вы не только получаете огромные преимущества современного языка, такого как Python, но также можете применять современные методы разработки к коду ваших электронных таблиц.

Хотя немногие люди это сделают. хотите фактически создавать и обучать нейронные сети в Excel, по-прежнему имеет значение возможность доступа к нейронным сетям из Excel. В значительной степени то, что делает машинное обучение полезным, — это способность использовать его для принятия решений. Если лица, принимающие решения, уже используют Excel, мы можем упростить им задачу, предоставив им обученные и проверенные решения машинного обучения в Excel. Это может быть значительно улучшенный рабочий процесс по сравнению с ними, используя Excel для выполнения некоторых базовых вычислений, затем переходя к пользовательскому инструменту или веб-приложению (или, что еще хуже, отправляя электронное письмо кому-то из группы науки о данных с таблицей!), А затем возвращая эти результаты обратно в Excel — что они захотят сделать, независимо от того, насколько хорош ваш настраиваемый инструмент;)

Вы можете загрузить код и пример книги из репозитория GitHub https://github. com/pyxll/pyxll-examples в папке pytorch. Вам также понадобится PyXLL, который вы можете загрузить с 30-дневной бесплатной пробной версией по адресу https://www.pyxll.com/download.html.

Оцените статью
Botgadget.ru
Добавить комментарий