Документация Engee

Экосистема Julia для Flux

Одним из преимуществ языка Julia является развитая экосистема пакетов, предоставляющая пользователю широкие возможности через согласованный интерфейс.

Ниже приведен неполный список пакетов Julia, дополняющих Flux при решении стандартных задач машинного обучения и глубокого обучения. Чтобы добавить свой проект, отправьте запрос на вытягивание. См. также список научных работ, в которых упоминается Flux или Zygote.

Модели Flux

  • Репозиторий Flux model-zoo содержит примеры из различных предметных областей.

Компьютерное зрение

  • ObjectDetector.jl предоставляет готовую систему распознавания изображений посредством YOLO.

  • Metalhead.jl содержит множество передовых моделей компьютерного зрения, которые можно легко применять для переноса обучения.

  • UNet.jl — это универсальная реализация UNet.

Обработка естественного языка

  • Transformers.jl предоставляет компоненты для моделей трансформеров для обработки естественного языка, а также ряд готовых обученных моделей.

  • TextAnalysis.jl предоставляет ряд алгоритмов обработки естественного языка, на внутреннем уровне использующих модели Flux.

Обучение с подкреплением

  • AlphaZero.jl provides a generic, simple and fast implementation of Deepmind’s AlphaZero algorithm.

  • ReinforcementLearning.jl offers a collection of tools for doing reinforcement learning research in Julia.

Обучение на основе графов

  • GraphNeuralNetworks.jl — это современная, производительная, гибкая библиотека для построения графовых нейронных сетей на основе Flux.jl.

  • GeometricFlux.jl — это первая библиотека для построения графовых нейронных сетей для Julia.

  • NeuralOperators.jl позволяет обучать бесконечномерные дифференциальные уравнения в частных производных путем обучения непрерывной функции вместо использования метода конечных элементов.

  • SeaPearl.jl — это решатель программирования в ограничениях, который использует обучение с подкреплением на основе графов.

Временные ряды

  • FluxArchitectures.jl — это коллекция расширенных сетевых архитектур для прогнозирования временных рядов.

Устойчивые сети

  • RobustNeuralNetworks.jl включает классы нейронных сетей, которые естественным образом отвечают условиям устойчивости.


Инструменты, тесно связанные с Flux

Вы вряд ли сталкивались с этими вспомогательными инструментами, если никогда не работали с Flux.

Высокоуровневые потоки обучения

  • FastAI.jl — это библиотека Python fast.ai, портированная в Julia.

  • FluxTraining.jl — это пакет для написания и использования эффективных, расширяемых циклов обучения для моделей глубокого обучения. Он поддерживает обратные вызовы для множества распространенных сценариев использования, таких как планирование гиперпараметров, отслеживание и регистрация показателей, копирование в контрольных точках, досрочная остановка и других. Расширяет возможности обучения в FastAI.jl.

Наборы данных

Распространенные наборы данных для машинного обучения предоставляются следующими пакетами в составе экосистемы Julia:

  • MLDatasets.jl: пакет для скачивания, распаковки тестовых наборов данных и доступа к ним.

  • GraphMLDatasets.jl: библиотека наборов данных для машинного обучения на основе графов.

Конвейеризация

Tools to put data into the right order for creating a model.

  • Augmentor.jl is a real-time library augmentation library for increasing the number of training images.

  • DataAugmentation.jl aims to make it easy to build stochastic, label-preserving augmentation pipelines for vision use cases involving images, keypoints and segmentation masks.

  • MLUtils.jl (replaces MLDataUtils.jl and MLLabelUtils.jl) is a library for processing Machine Learning datasets.

Параметры

  • ParameterSchedulers.jl: стандартные политики планирования для машинного обучения.


Дифференцируемое программирование

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

  • Экосистема SciML использует Flux и Zygote для применения нейронных сетей в сочетании с различными дифференциальными уравнениями с целью наиболее эффективного моделирования методом «черного ящика» и механистического моделирования.

  • DiffEqFlux.jl предоставляет инструменты для создания нейронных дифференциальных уравнений.

  • Flux3D.jl демонстрирует машинное обучения на трехмерных данных.

  • RayTracer.jl сочетает возможности машинного обучения и компьютерного зрения для реализации дифференцируемого средства визуализации.

  • Duckietown.jl: дифференцируемый симулятор Duckietown.

  • В проекте Yao.jl библиотеки Flux и Zygote используются для квантового дифференцируемого программирования.

  • AtomicGraphNets.jl обеспечивает модели на основе графа обучения для атомных систем, применяемых в химии.

  • DiffImages.jl: дифференцируемое моделирование компьютерного зрения в Julia с использованием экосистемы Images.jl.

Вероятностное программирование

  • Turing.jl extends Flux’s differentiable programming capabilities to probabilistic programming.

  • Omega.jl is a research project aimed at causal, higher-order probabilistic programming.

  • Stheno.jl provides flexible Gaussian processes.

Статистика

  • OnlineStats.jl предоставляет однопроходные алгоритмы для статистических расчетов.


Прочие полезные пакеты

Здесь перечислен ряд полезных пакетов разного назначения.

  • AdversarialPrediction.jl позволяет легко оптимизировать универсальные показатели производительности в средах контролируемого обучения с помощью фреймворка состязательного прогнозирования.

  • Mill.jl помогает создавать прототипы гибких многоэкземплярных моделей обучения.

  • MLMetrics.jl — это вспомогательный пакет для оценки моделей, применяемых при анализе и обработке данных, а также машинном обучении.

  • Torch.jl предоставляет возможности torch в Julia.

  • ValueHistories.jl — это вспомогательный пакет для эффективного отслеживания истории оптимизации, кривых обучения или другой информации произвольного типа и с произвольным интервалом времени выборки.

  • InvertibleNetworks.jl: стандартные блоки для инвертируемых нейронных сетей на языке программирования Julia.

  • ProgressMeter.jl: счетчики хода выполнения для длительных вычислений.

  • TensorBoardLogger.jl: простые средства ведения журналов для tensorboard в Julia

  • ArgParse.jl — это пакет для синтаксического анализа аргументов командной строки в программах Julia.

  • Parameters.jl: типы со значениями полей по умолчанию, конструкторами именованных аргументов и макросами упаковки и распаковки.

  • BSON.jl — это пакет для работы с двоичным форматом сериализации JSON.

  • DataFrames.jl: хранящиеся в памяти табличные данные в Julia.

  • DrWatson.jl — вспомогательное ПО для научных проектов.

Тесная интеграция между пакетами Julia демонстрируется в ряде примеров в репозитории model-zoo.


Альтернативы Flux

В Julia есть ряд других библиотек для построения нейронных сетей.

  • Библиотека SimpleChains.jl предназначена для быстрого создания небольших, простых нейронных сетей на базе ЦП. Использует LoopVectorization.jl. (В DiffEqFlux.jl называлась FastChain.)

  • Knet.jl — это библиотека для построения нейронных сетей на основе AutoGrad.jl.

  • Lux.jl (ранее ExplicitFluxLayers.jl) во многом повторяет структуру, назначение и бэкенд NNlib.jl / Optimisers.jl библиотеки Flux. Но вместо инкапсуляции всех параметров в структуре модели она делит их на три компонента: модель, дерево параметров и дерево состояний модели.

Совместимость: Explicit or explicit?

В документации по обучению Flux описывается переход от неявных градиентов Zygote к явным и от структур в виде словарей к древовидным структурам. (См. также описание этих изменений в Zygote.) Lux также использует Zygote, но слово «явный» означает совершенно другое, а именно — хранение дерева параметров (и состояний) отдельно от модели.