Горгония - это библиотека, которая помогает облегчить машинное обучение в ходе. Напишите и оцените математические уравнения, включающие многомерные массивы легко. Если это звучит как Theano или Tensorflow, это потому, что идея очень похожа. В частности, библиотека довольно низкоуровневая, как Theano, но имеет более высокие цели, такие как Tensorflow.
Горгония:
Основной целью для Gorgonia является очень эффективная библиотека на основе вычислений на основе машинного обучения/графика, которая может масштабироваться на нескольких машинах. Это должно принести привлекательность GO (простой процесс компиляции и развертывания) в мир ML. В настоящее время это долгий путь, однако, детские шаги уже есть.
Вторичная цель для Горгонии-предоставить платформу для исследования нестандартных вещей, связанных с глубоким обучением и нейронной сетью. Это включает в себя такие вещи, как нео-хеббиянское обучение, алгоритмы обрезания угловых, эволюционные алгоритмы и тому подобное.
Основной причиной использования Gorgonia является комфорт разработчика. Если вы широко используете стек GO, теперь у вас есть доступ к возможности создавать готовые к производству системы машинного обучения в среде, с которой вы уже знакомы и комфортно.
ML/AI в целом обычно разделяется на два этапа: экспериментальную стадию, где кто -то строит различные модели, тесты и повторные тестирование; и развернутое состояние, в котором развернута модель после тестирования и сыгранной. Это требует различных ролей, таких как ученый для данных и инженер данных.
Как правило, две фазы имеют разные инструменты: Python (Pytorch и т. Д.) Обычно используется для экспериментальной стадии, а затем модель перезаписывается на некотором более эффективном языке, таком как C ++ (с использованием DLIB, MLPack и т. Д.). Конечно, в настоящее время разрыв закрывается, и люди часто делят инструменты между ними. Tensorflow - один из таких инструментов, который соединяет разрыв.
Горгония стремится сделать то же самое, но для среды хо. Gorgonia в настоящее время довольно эффективная - ее скорость сопоставима с реализацией процессора Pytorch и Tensorflow. Внедрение графических процессоров немного привередлива для сравнения из -за тяжелого налога на CGO, но будьте уверены, что это область активного улучшения.
Пакет Go -Gettable: go get -u gorgonia.org/gorgonia .
Горгония совместима с модулями GO.
Современная документация, ссылки и учебные пособия присутствуют на официальном веб-сайте Gorgonia по адресу https://gorgonia.org.
Проект Горгонии имеет слабый канал на Gopherslack, а также аккаунт в Твиттере. Официальные обновления и объявления будут размещены на этих двух сайтах.
Gorgonia работает, создавая график вычисления, а затем выполняя его. Думайте об этом как о языке программирования, но ограничивается математическими функциями и не имеет возможности ветвления (нет, если/тогда или петли). На самом деле, это доминирующая парадигма, о которой пользователь должен использовать. График вычисления - это AST.
Microsoft CNTK, с его бразонта, является, пожалуй, лучшей для демонстрации идеи о том, что создание графа вычислений и запуск графиков вычислений - это разные вещи, и что пользователь должен быть в разных режимах мышления, когда вы ходите по ним.
В то время как реализация Горгонии не обеспечивает разделение мышления, насколько это сделать CNTK, синтаксис немного помогает.
Вот пример - скажем, вы хотите определить математическое выражение z = x + y . Вот как ты это сделал:
package gorgonia_test
import (
"fmt"
"log"
. "gorgonia.org/gorgonia"
)
// Basic example of representing mathematical equations as graphs.
//
// In this example, we want to represent the following equation
// z = x + y
func Example_basic () {
g := NewGraph ()
var x , y , z * Node
var err error
// define the expression
x = NewScalar ( g , Float64 , WithName ( "x" ))
y = NewScalar ( g , Float64 , WithName ( "y" ))
if z , err = Add ( x , y ); err != nil {
log . Fatal ( err )
}
// create a VM to run the program on
machine := NewTapeMachine ( g )
defer machine . Close ()
// set initial values then run
Let ( x , 2.0 )
Let ( y , 2.5 )
if err = machine . RunAll (); err != nil {
log . Fatal ( err )
}
fmt . Printf ( "%v" , z . Value ())
// Output: 4.5
} Вы можете отметить, что это немного более многословно, чем другие пакеты схожей природы. Например, вместо того, чтобы компиляция с вызывенной функцией, Gorgonia специально компилизируется в A *program , которая требует *TapeMachine для запуска. Это также требует ручного Let(...) .
Автор хотел бы утверждать, что это хорошая вещь - перевести свое мышление на машинное мышление. Это очень помогает в выяснении, где все может пойти не так.
Кроме того, нет поддержки ветвления, то есть не существует условных (если/else) или петли. Цель не состоит в том, чтобы построить компьютер, заполненный Тьюрингом.
В example проекта присутствуют больше примеров, и на главном веб-сайте присутствуют пошаговые учебные пособия.
Горгония поставляется с поддержкой CUDA из коробки. Пожалуйста, смотрите справочную документацию о том, как работает CUDA на веб -сайте Gorgonia.org или перейти к учебному пособию.
Мы используем SEMVER 2.0.0 для нашей версии. До 1.0 API -интерфейсы Gorgonia, как ожидается, изменится немного. API определяется экспортируемыми функциями, переменными и методами. Для здравомыслия разработчиков существуют незначительные различия в SEMVER, которые мы будем применять до версии 1.0. Они перечислены ниже:
API Горгонии на сегодняшний день, не считается стабильным. Это будет стабильно от версии 1.0.
Gorgonia поддерживает 2 версии ниже главной ветви GO. Это означает, что Gorgonia будет поддерживать текущую выпущенную версию GO, и до 4 предыдущих версий - предоставление чего -то не сломается. Там, где это возможно, будет предоставлен прокладка (для таких вещей, как новые sort API или math/bits , которые вышли в Go 1.9).
Текущая версия GO составляет 1.13.1. Самая ранняя версия Gorgonia поддерживает Go 1.11.x, но Gonum поддерживает только 1,12+. Следовательно, минимальная версия GO для запуска главной ветви - GO> 1.12.
Горгония работает на:
Если вы протестировали Gorgonia на других платформах, пожалуйста, обновите этот список.
Gorgonia использует некоторые инструкции по чистому ассемблеру, чтобы ускорить некоторые математические операции. К сожалению, поддерживается только AMD64.
Очевидно, что, скорее всего, вы читаете это на GitHub, Github составляет основную часть рабочего процесса для участия в этом пакете.
См. Также: Anplosing.md
Все взносы приветствуются. Тем не менее, есть новый класс участников, называемый значимыми участниками.
Значительный участник продемонстрировал глубокое понимание того, как работает библиотека и/или ее окрестности. Вот примеры того, что представляет собой значительный вклад:
Значительный список участников будет обновляться один раз в месяц (если кто -то даже использует Gorgonia).
Лучший способ поддержки сейчас - открыть билет на GitHub.
runtime.GC() в тестах? Ответ на это прост - дизайн пакета использует CUDA определенным образом: в частности, устройство CUDA и контекст привязаны к VM , а не на уровне упаковки. Это означает, что для каждой созданной VM различный контекст CUDA создается для устройства на VM . Таким образом, все операции будут хорошо играть с другими приложениями, которые могут использовать CUDA (однако, это должно быть проверено на стресс).
Контексты CUDA разрушаются только тогда, когда VM собирает мусор (с помощью функции финализатора). В тестах около 100 VM создается, а сборка мусора по большей части можно считать случайным. Это приводит к случаям, когда графический процессор исчерпывает память, поскольку используется слишком много контекстов.
Поэтому в конце любых тестов, которые могут использовать графический процессор, вызов runtime.GC() выполняется для насильственного сбора мусора, освобождая воспоминания графического процессора.
В производстве вряд ли начнут столько VM машин, поэтому это не проблема. Если есть, откройте билет на GitHub, и мы рассмотрим добавление метода Finish() для VM машины.
Горгония лицензирована под вариантом Apache 2.0. Это то же самое, что и лицензия Apache 2.0, за исключением неспособности коммерческой прибыли непосредственно из пакета, если вы не являетесь важным участником (например, предоставление коммерческой поддержки для пакета). Вполне нормально получить прибыль непосредственно от производной Горгонии (например, если вы используете Gorgonia в качестве библиотеки в своем продукте)
Каждому все еще разрешено использовать Gorgonia для коммерческих целей (например: использование его в программном обеспечении для вашего бизнеса).
Есть очень мало зависимостей, которые использует Горгония - и все они довольно стабильны, поэтому на данный момент нет необходимости в инструментах по продаже. Это список внешних пакетов, которые вызывает Gorgonia, ранжируемое по тому, как этот пакет имеет (подпакинги опущены):
| Упаковка | Используется для | Жизнеспособность | Примечания | Лицензия |
|---|---|---|---|---|
| GONUM/График | Сортировка *ExprGraph | Жизненно важный. Удаление означает, что Горгония не будет работать | Разработка Gorgonia стремится не отставать от наиболее обновленной версии | Лицензия Gonum (MIT/BSD-подобная) |
| GONUM/BLAS | Тенсорная подпака линейная алгебра | Жизненно важный. Удаление означает, что Gorgonial не будет работать | Разработка Gorgonia стремится не отставать от наиболее обновленной версии | Лицензия Gonum (MIT/BSD-подобная) |
| кузок | Драйверы CUDA | Необходимо для операций CUDA | Тот же сопровождающий, что и Горгония | MIT/BSD-подобный |
| Math32 | float32 Операции | Может быть заменен float32(math.XXX(float64(x))) | Тот же сопровождающий, что и Gorgonia, тот же API, что и встроенный math пакет | MIT/BSD-подобный |
| хм | Система типа для Горгонии | Графики Горгонии довольно тесно связаны с системой типа | Тот же сопровождающий, что и Горгония | MIT/BSD-подобный |
| VECF64 | Оптимизированные []float64 | Может быть сгенерировано в пакете tensor/genlib . Тем не менее, было сделано/будет сделано множество оптимизаций | Тот же сопровождающий, что и Горгония | MIT/BSD-подобный |
| VECF32 | Оптимизированные []float32 | Может быть сгенерировано в пакете tensor/genlib . Тем не менее, было сделано/будет сделано множество оптимизаций | Тот же сопровождающий, что и Горгония | MIT/BSD-подобный |
| набор | Различные наборные операции | Можно легко заменить | Стабильный API за последний 1 год | установить лицензию (MIT/BSD-подобное) |
| Gographviz | Используется для графиков печати | Графическая печать жизненно важна только для отладки. Горгония может выжить без, но с крупной (но, возможно, невитарной) потерей функций | Последнее обновление 12 апреля 2017 года | Лицензия Gographviz (Apache 2.0) |
| rng | Используется для реализации вспомогательных функций для генерации начальных весов | Можно заменить довольно легко. Горгония может обойтись без удобства | Лицензия RNG (Apache 2.0) | |
| ошибки | Ошибка обертывания | Горгония не умрет без нее. На самом деле Горгония также использовала GoErrors/ошибки в прошлом. | Стабильный API за последние 6 месяцев | Лицензия на ошибки (MIT/BSD-подобное) |
| GONUM/MAT | Совместимость между матрицей Tensor и гонума | Разработка Gorgonia стремится не отставать от наиболее обновленной версии | Лицензия Gonum (MIT/BSD-подобная) | |
| свидетельствовать/утверждать | Тестирование | Может обойтись без, но будет огромной болью в заднице, чтобы проверить | Лицензия свидетельствует (MIT/BSD-подобное) |
Это пакеты и библиотеки, которые вдохновили и были адаптированы в процессе написания Горгонии (используемые пакеты GO уже были объявлены выше):
| Источник | Как это используется | Лицензия |
|---|---|---|
| Numpy | Вдохновленные большие порции. Непосредственно адаптированные алгоритмы для нескольких методов (явно обозначенные в документах) | MIT/BSD-подобный. Нюмпи Лицензия |
| Теано | Вдохновленные большие порции. (Не уверен: количество непосредственно адаптированных алгоритмов) | MIT/BSD-подобная лицензия Theano |
| Кофе | im2col и col2im непосредственно взяты из CAFFE. Алгоритмы свертки, вдохновленные оригинальными методами Caffee | Лицензия Caffe |