Tocha (aprendizado de máquina) - Torch (machine learning)
Autor (es) original (is) | Ronan Collobert, Samy Bengio , Johnny Mariéthoz |
---|---|
lançamento inicial | Outubro de 2002 |
Versão estável | 7.0 / 27 de fevereiro de 2017
|
Repositório | |
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 |
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 torch
pacote 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 nn
pacote é usado para construir redes neurais . É dividido em objetos modulares que compartilham uma Module
interface 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
, Parallel
e Concat
para criar gráficos complexos feitos sob medida. Módulos mais simples como Linear
, Tanh
e Max
compõ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 MSECriterion
e 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 mlp
Módulo no Tensor de entrada x
, Tensor de destino y
com 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 StochasticGradient
aula para treinar uma rede neural usando descida gradiente estocástica , embora o optim
pacote 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.