Tocha (aprendizado de máquina) - Torch (machine learning)

Tocha
Logotipo da tocha
Autor (es) original (is) Ronan Collobert, Samy Bengio , Johnny Mariéthoz
lançamento inicial Outubro de 2002 ; 18 anos atras ( 2002-10 )
Versão estável
7.0 / 27 de fevereiro de 2017 ; 4 anos atras ( 27/02/2017 )
Repositório Edite isso no Wikidata
Escrito em Lua , LuaJIT , C , CUDA e C ++
Sistema operacional Linux , Android , Mac OS X , iOS
Modelo Biblioteca para aprendizado de máquina e aprendizado profundo
Licença Licença BSD
Local na rede Internet tocha .ch

Torch é uma biblioteca de aprendizado de máquina de código aberto , uma estrutura de computação científica e uma linguagem de script baseada na linguagem de programação Lua . Ele fornece uma ampla gama de algoritmos para aprendizado profundo e usa a linguagem de script LuaJIT e uma implementação C subjacente . A partir de 2018, o Torch não está mais em desenvolvimento ativo. No entanto , o PyTorch , que é baseado na biblioteca Torch, foi desenvolvido ativamente em junho de 2021.

tocha

O pacote principal do Torch é torch. Ele fornece uma matriz N-dimensional ou Tensor flexível, que oferece suporte a rotinas básicas para indexação, divisão, transposição, conversão de tipo, redimensionamento, compartilhamento de armazenamento e clonagem. Este objeto é usado pela maioria dos outros pacotes e, portanto, forma o objeto central da biblioteca. O tensor também suporta operações matemáticas como max, min, sum, distribuições estatísticas como uniforme , normais e multinominal , e BLAS operações como o produto escalar , a multiplicação de matrizes do vector , a multiplicação de matrizes de matriz , produto de matriz-vector e do produto da matriz .

O seguinte exemplifica o uso de tocha por meio de seu interpretador 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

O torchpacote também simplifica a programação e serialização orientada a objetos , fornecendo várias funções convenientes que são usadas em todos os seus pacotes. A torch.class(classname, parentclass)função pode ser usada para criar fábricas de objetos ( classes ). Quando o construtor é chamado, torch inicializa e define uma tabela Lua com a metatabela definida pelo usuário , o que torna a tabela um objeto .

Os objetos criados com a fábrica tocha também pode ser serializado, contanto que eles não contêm referências a objetos que não podem ser serializados, como a Lua coroutines e Lua userdata . No entanto, userdata pode ser serializado se for encapsulado por uma tabela (ou metatabela) que fornece métodos read()e write().

nn

O nnpacote é usado para construir redes neurais . É dividido em objetos modulares que compartilham uma Moduleinterface comum . Os módulos têm um método forward()e backward()que permite feedforward e backpropagate , respectivamente. Os módulos podem ser unidos usando compostos de módulo , como Sequential, Parallele Concatpara criar gráficos complexos feitos sob medida. Módulos mais simples como Linear, Tanhe Maxcompõem os módulos componentes básicos. Esta interface modular fornece diferenciação gradiente automática de primeira ordem . O que se segue é um exemplo de caso de uso para construir um perceptron multicamadas usando Módulos:

> 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]

As funções de perda são implementadas como subclasses de Criterion, que tem uma interface semelhante a Module. Ele também possui forward()e backward()métodos para calcular os gradientes de perda e retropropagação, respectivamente. Os critérios são úteis para treinar a rede neural em tarefas clássicas. Os critérios comuns são o critério de erro quadrático médio implementado em MSECriterione o critério de entropia cruzada implementado em ClassNLLCriterion. O que se segue é um exemplo de uma função Lua que pode ser chamada iterativamente para treinar um mlpMódulo no Tensor de entrada x, Tensor de destino ycom um escalar 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

Ele também tem StochasticGradientaula para treinar uma rede neural usando descida gradiente estocástica , embora o optimpacote forneça muito mais opções a esse respeito, como regularização de queda de momentum e peso .

Outros pacotes

Muitos pacotes diferentes dos pacotes oficiais acima são usados ​​com o Torch. Eles estão listados na folha de referências da tocha. Esses pacotes extras fornecem uma ampla variedade de utilitários, como paralelismo, entrada / saída assíncrona, processamento de imagem e assim por diante. Eles podem ser instalados com LuaRocks , o gerenciador de pacotes Lua que também está incluído na distribuição Torch.

Formulários

O Torch é usado pelo Facebook AI Research Group, IBM , Yandex e Idiap Research Institute . O Torch foi estendido para uso em Android e iOS . Ele tem sido usado para construir implementações de hardware para fluxos de dados como aqueles encontrados em redes neurais.

O Facebook lançou um conjunto de módulos de extensão como software de código aberto.

Veja também

Referências

links externos