Факел (машинное обучение) - Torch (machine learning)
Оригинальный автор (ы) | Ронан Коллобер, Сами Бенджио , Джонни Мариетос |
---|---|
Первый выпуск | Октябрь 2002 г . |
Стабильный выпуск | 7.0 / 27 февраля 2017 г .
|
Репозиторий | |
Написано в | Lua , LuaJIT , C , CUDA и C ++ |
Операционная система | Linux , Android , Mac OS X , iOS |
Тип | Библиотека для машинного обучения и глубокого обучения |
Лицензия | Лицензия BSD |
Веб-сайт | факел |
Torch - это библиотека машинного обучения с открытым исходным кодом , среда научных вычислений и язык сценариев, основанный на языке программирования Lua . Он предоставляет широкий спектр алгоритмов для глубокого обучения и использует язык сценариев LuaJIT и базовую реализацию C. По состоянию на 2018 год Torch больше не находится в активной разработке. Однако PyTorch , основанный на библиотеке Torch, активно развивается с июня 2021 года.
факел
Основной пакет Torch - это torch
. Он предоставляет гибкий N-мерный массив или тензор, который поддерживает базовые процедуры для индексации, нарезки, транспонирования, преобразования типов, изменения размера, совместного использования хранилища и клонирования. Этот объект используется большинством других пакетов и, таким образом, образует основной объект библиотеки. Тензор также поддерживает математические операции , такие как max
, min
, sum
, статистические распределения , как мундир , нормальный и мультиномиальная и BLAS операций , таких как скалярное произведение , матрично-векторного умножения , умножение матрицы на матрицу , матрица-векторного произведения и произведения матриц .
Следующий пример иллюстрирует использование torch через его интерпретатор REPL :
> a = torch.randn(3,4)
> =a
-0.2381 -0.3401 -1.7844 -0.2615
0.1411 1.6249 0.1708 0.8299
-1.0434 2.2291 1.0525 0.8465
[torch.DoubleTensor of dimension 3x4]
> a[1][2]
-0.34010116549482
> a:narrow(1,1,2)
-0.2381 -0.3401 -1.7844 -0.2615
0.1411 1.6249 0.1708 0.8299
[torch.DoubleTensor of dimension 2x4]
> a:index(1, torch.LongTensor{1,2})
-0.2381 -0.3401 -1.7844 -0.2615
0.1411 1.6249 0.1708 0.8299
[torch.DoubleTensor of dimension 2x4]
> a:min()
-1.7844365427828
torch
Пакет также упрощает объектно - ориентированное программирование и сериализации путем предоставления различных вспомогательных функций , которые используются во всем его пакетов. torch.class(classname, parentclass)
Функция может быть использована для создания объектов фабрики ( классы ). Когда вызывается конструктор , torch инициализирует и устанавливает таблицу Lua с определяемой пользователем метатаблицей , что делает таблицу объектом .
Объекты , созданные с факелами завода также можно сериализовать, до тех пор , пока они не содержат ссылки на объекты , которые не могут быть сериализовать, такие как Lua сопрограммам и Lua UserData . Тем не менее, пользовательские данные могут быть сериализованы , если она обернута с помощью таблицы (или метатаблицы) , который обеспечивает read()
и write()
методы.
nn
nn
Пакет используется для построения нейронных сетей . Он разделен на модульные объекты, которые имеют общий Module
интерфейс. Модули имеют forward()
и backward()
метод , который позволяет им Feedforward и backpropagate соответственно. Модули можно объединять, используя составные части модулей , например Sequential
, Parallel
и Concat
для создания сложных графиков с учетом конкретных задач. Упрощенные модули нравятся Linear
, Tanh
и Max
составляют основные составные модули. Этот модульный интерфейс обеспечивает автоматическое дифференцирование градиента первого порядка . Ниже приводится пример использования для создания многослойного персептрона с использованием модулей:
> mlp = nn.Sequential()
> mlp:add( nn.Linear(10, 25) ) -- 10 input, 25 hidden units
> mlp:add( nn.Tanh() ) -- some hyperbolic tangent transfer function
> mlp:add( nn.Linear(25, 1) ) -- 1 output
> =mlp:forward(torch.randn(10))
-0.1815
[torch.Tensor of dimension 1]
Функции потерь реализованы как подклассы Criterion
, интерфейс которых аналогичен Module
. В нем также есть forward()
и backward()
методы для вычисления градиентов потерь и обратного распространения соответственно. Критерии помогают обучать нейронную сеть выполнять классические задачи. Общими критериями являются критерий среднеквадратичной ошибки, реализованный в, MSECriterion
и критерий кросс-энтропии, реализованный в ClassNLLCriterion
. Ниже приводится пример функции Lua, которую можно итеративно вызывать для обучения mlp
модуля входному тензору x
, целевому тензору y
со скаляром learningRate
:
function gradUpdate(mlp, x, y, learningRate)
local criterion = nn.ClassNLLCriterion()
pred = mlp:forward(x)
local err = criterion:forward(pred, y);
mlp:zeroGradParameters();
local t = criterion:backward(pred, y);
mlp:backward(x, t);
mlp:updateParameters(learningRate);
end
В нем также есть StochasticGradient
класс для обучения нейронной сети с использованием стохастического градиентного спуска , хотя optim
пакет предоставляет гораздо больше возможностей в этом отношении, например регуляризацию спада импульса и веса .
Другие пакеты
Вместе с Torch используется множество пакетов, отличных от указанных выше официальных пакетов. Они перечислены в шпаргалке по факелам. Эти дополнительные пакеты предоставляют широкий спектр утилит, таких как параллелизм, асинхронный ввод / вывод, обработка изображений и так далее. Их можно установить с помощью LuaRocks , менеджера пакетов Lua, который также включен в дистрибутив Torch.
Приложения
Torch используется Facebook AI Research Group, IBM , Yandex и Idiap Research Institute . Torch расширен для использования на Android и iOS . Он использовался для создания аппаратных реализаций потоков данных, подобных тем, которые используются в нейронных сетях.
Facebook выпустил набор модулей расширения в виде программного обеспечения с открытым исходным кодом.