Факел (машинное обучение) - Torch (machine learning)

Факел
Логотип факела
Оригинальный автор (ы) Ронан Коллобер, Сами Бенджио , Джонни Мариетос
Первый выпуск Октябрь 2002 г . ; 18 лет назад ( 2002-10 )
Стабильный выпуск
7.0 / 27 февраля 2017 г . ; 4 года назад ( 27.02.2017 )
Репозиторий Отредактируйте это в Викиданных
Написано в Lua , LuaJIT , C , CUDA и C ++
Операционная система Linux , Android , Mac OS X , iOS
Тип Библиотека для машинного обучения и глубокого обучения
Лицензия Лицензия BSD
Веб-сайт факел .ch

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 выпустил набор модулей расширения в виде программного обеспечения с открытым исходным кодом.

Смотрите также

Рекомендации

Внешние ссылки