PyTorch — это библиотека глубокого обучения. С помощью PyTorch можно создавать очень сложные модели глубокого обучения. Однако иногда возникает необходимость в графическом представлении архитектуры модели.  В этом посте вы узнаете: Как сохранить модель PyTorch в формате обмена данными. Как использовать Netron для создания графического представления. Давайте начнем. PyTorch — очень гибкая библиотека для глубокого обучения. Строго говоря, она никогда не предписывает, как вы должны строить свою модель, пока она работает как функция, которая может преобразовать входной тензор в выходной тензор.  Это проблема: имея модель вы никогда не узнаете, как она работает, пока не проследите за входным тензором и не соберете трассировку до получения выходного тензора. Поэтому преобразование модели PyTorch в картинку не является тривиальным. Существует множество библиотек для решения этой проблемы. Но в общем случае есть только два способа решения этой проблемы: вы можете проследить за тензором на прямом проходе и посмотреть, какие операции (т. е. слои) применяется, или проследить за тензором на обратном проходе и посмотреть, как градиент распространяется на вход. Вы можете найти подсказки о структуре внутри модели только таким образом. Когда вы сохраняете модель PyTorch, вы сохраняете ее состояния. Вы можете получить состояния модели с помощью функции model.state_dict(). Хотя тензоры весов имеют имена, которые помогут вам восстановить их в модели, у вас нет подсказок о том, как весовые коэффициенты связаны друг с другом.  Единственный способ связать тензоры и выяснить их взаимосвязь — это получить градиент тензора. Когда вы запускаете модель и получаете результат, все вычисления, включая зависимости от других тензоров, запоминаются каждым промежуточным тензором, чтобы можно было провести автоматическое дифференцирование. Действительно, если вы хотите узнать алгоритм, лежащий в основе модели PyTorch, это тоже возможный вариант.  Существует всего несколько инструментов для создания графического представления для модели PyTorch.  Ниже вы узнаете об инструменте Netron. Это «средство визуализации моделей глубокого обучения». Это программное обеспечение, которое можно установить и запустить на macOS, Linux и Windows. Вы можете посетить страницу ниже и загрузить программное обеспечение для своей платформы: https://github.com/lutzroeder/netron/releases Существует также онлайн-сервис, в котором вы можете визуализировать свою модель, загрузив файл модели. Netron не может визуализировать модель PyTorch из сохраненных состояний, потому что недостаточно подсказок, чтобы рассказать о структуре модели. Однако PyTorch позволяет преобразовать модель в формат обмена ONNX, который Netron может понять. Давайте начнем с примера. Ниже мы создали простую модель для классификации набора данных радужной оболочки глаза.  Это задача классификации с тремя классами. Поэтому модель должна выводить вектор из трех значений. Полный код, который вы могли бы создать для этой задачи, выглядит следующим образом, набор данных получен из scikit-learn: Выполнение вышеуказанного кода дает, например, следующее: Итак, вы знаете, что model это модель PyTorch, которая может принимать тензор и возвращать тензор. Вы можете преобразовать эту модель в формат ONNX с помощью функции torch.onnx.export(): Выполнение этой функции создаст файл iris.onnx в локальном каталоге. Вам необходимо предоставить пример тензора, который работает с моделью в качестве входных данных (X_test в приведенном выше примере).  Это необходимо потому, что во время преобразования необходимо следовать этому примеру тензора, чтобы понять, какие операции должны быть применены, чтобы вы могли преобразовать алгоритм шаг за шагом в формат ONNX.  Каждый вес в модели PyTorch является тензором, и им присвоено имя. Но входные и выходные тензоры обычно не имеют имен, поэтому вам необходимо задать им имя при выполнении функции export(). Эти имена быть представлены в виде списка строк, поскольку в общем случае модель может принимать несколько тензоров и возвращать несколько тензоров. Обычно функцию export() следует запускать после цикла обучения. Это связано с тем, что созданная модель ONNX содержит полную модель, которую можно запустить без библиотеки PyTorch. Вы хотите сохранить оптимизированный вес в ней. Однако для целей визуализации модели в Netron качество модели не имеет значения. Вы можете вызвать функцию export(), как только модель PyTorch будет создана. После запуска Netron вы можете открыть сохраненный файл ONNX. В данном примере вы должны увидеть следующий экран: Он показывает, как входной тензор соединяется с выходным тензором с помощью различных операций в модели глубокого обучения. В визуализации используются имена входного и выходного тензоров, которые вы указали в функции export().  Кликнув мышкой на поле, вы получите более подробную информацию о конкретном тензоре или операции. Однако названия операций, которые вы видите в Netron, могут отличаться от того, как вы называете их в PyTorch.  На приведенном выше экране вы видите, что слой nn.Linear() становится «Gemm», что означает «операция умножения общей матрицы». Вы даже можете исследовать веса на слое с помощью Netron, поместив на них курсор и щелкнув кнопкой мыши. Если вы хотите сохранить копию этой визуализации, вы можете экспортировать ее в формат PNG в Netron. Netron — это проект с открытым исходным кодом, исходный код которого вы можете найти на Github: https://github.com/lutzroeder/netron Онлайн версия Netron доступна по ссылке: https://netron.app/ Еще одна библиотека для визуализации — torchviz, но в отличие от примера, который вы видели выше, она трассирует модель с помощью обратного прохода: https://github.com/szagoruyko/pytorchviz В этом посте вы узнали, как визуализировать модель. В частности, вы узнали: Почему визуализация модели PyTorch является сложной задачей. Как преобразовать модель PyTorch в формат ONNX. Как использовать Netron для визуализации модели ONNX.