Torch
Torch | ||
---|---|---|
Parte de LuaJIT | ||
Información general | ||
Tipo de programa | Biblioteca para aprendizaje automático y aprendizaje profundo | |
Autor | Ronan Collobert, Koray Kavukcuoglu, Clement Farabet | |
Lanzamiento inicial | 30 de octubre de 2002 (22 años y 18 días) | |
Licencia | Berkeley Software Distribution | |
Información técnica | ||
Programado en | Lua, LuaJIT, C, CUDA and C++ | |
Versiones | ||
Última versión estable | 7.0 ( 27 de febrero de 2017) | |
Enlaces | ||
Torch es una biblioteca de código abierto para aprendizaje automático, un marco de computación científica, y un lenguaje de script basado en el lenguaje de programación Lua.[1] Proporciona una amplia gama de algoritmos de aprendizaje profundo, y usa el lenguaje de script LuaJIT, sobre una implementación en C.
Torch se ha dejado de desarrollar en 2017,[2] en favor de otras plataformas. La comunidad de soporte de la última versión estable cerró definitivamente en 2019.[3] Sin embargo Torch se sigue usando para proyectos terminados, e incluso en desarrollos a través de PyTorch.
torch
[editar]El paquete central de Torch es torch. Provee un arreglo flexible N-dimensional o Tensor, el cual soporta rutinas básicas de indexado, recorte, transposición, revisión de tipos, redimensionamiento, almacenamiento compartido y clonación. Este objeto es usado por la mayoría de los otros paquetes y por lo tanto forma el objento central de la biblioteca. El Tensor también soporta operaciones matemáticas como max
, min
, sum
, distribuciones estadísticas como uniforme continua, normal y multinomial, y operaciones BLAS como multiplicación de matrices.
El siguiente ejemplo usa torch vía su intérprete 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
El paquete torch también simplifica la programación orientada a objetos y serialización al proveer varias funciones conveniente que son usadas a través de sus paquetes. La función torch.class(classname, parentclass)
puede ser usada para crear un patrón de diseño (clases). Cuando el constructor es llamado, torch inicializa y una tabla de Lua con la metatabla definida por el usuario, lo cual hace a la tabla un objeto.
Los objetos creados con el patrón de torch también puedens er serializados, mientras no contenga referencias a objetos que no puedan ser serializados, tales como Coroutine de Lua y userdata de Lua. Como sea, userdata puede ser serializado si es envuelto por una tabla (o metatabla) que provea los métodos read()
y write()
.
nn
[editar]El paquete nn es usado para construir redes neuronales. Está dividido en objetos modulares que comparten una interfaz Module
común. Los módulos tienen métodos forward()
y backward()
que les permiten prealimentar y retroalimentar, respectivamente. Los módulos pueden ser unidos usando composición de módulos, como Sequential
, Parallel
y Concat
para crear gráficas complejas a la medida de las tareas. Módulos más simples como Linear
, Tanh
y Max
complementan los módulos componentes básicos. Esta interfaz modular provee diferenciación automática de primer grado. El siguiente es un ejemplo de caso de uso para construir un perceptrón multicapa 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]
Las funciones de pérdida son implementadas como subclases de Criterion
, el cual tiene una interfaz similar a Module
. También tiene los métodos forward()
y backward
para calcular la pérdida y gradientes de propagación hacia atrás, respectivamente. El uso de criterios es de ayuda para entrenar redes neuronales en tareas clásicas. Criterios comunes son el error cuadrático medio implementado en MSECriterion
y la entropía cruzada implementada en ClassNLLCriterion
. El siguiente ejemplo es una función de Lua que puede ser llamada interativamente para entrena un módulo mlp
sobre una Tensor de entrada x
, Tensor objetivo y
con un 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
Tiene también la clase StochasticGradient
para entrenar una red neuronal usando gradiente descendente estocástico, aunque el paquete Optim provee muchas más opciones a este respecto, como algumos métodos de regularización.
Otros paquetes
[editar]Muchos paquetes además the los paquetes oficiales antes mencionados son usados con Torch. Estos están listado en torch cheatsheet. Estos paquetes extras proveen una amplia gama de utilidades tales como paralelismo, entrada/salida asíncrona, procesamiento de imagen, etc. Pueden ser instalados con LuaRocks, el administrador de paquetes Lua el cual también está incluido con la distribución de Torch.
Aplicaciones
[editar]Torch es usado por Facebook AI Research Group,[4] IBM,,[5] Yandex[6] y el Instituto de Investigación Idiap.[7] Torch ha sido extendido para su uso en Android[8] e iOS.[9] Ha sido usado para implementaciones construidas en hardware para flujos de datos como aquellos encontrados en redes neuronales.[10]
Facebook ha publicado un conjunto de módulos extensiones como software de código abierto.[11]
Bibliotecas relacionadas
[editar]- Deeplearning4j, una biblioteca código abierto de aprendizaje profundo escrito para Java y Scala
- OpenNN, una biblioteca código abierto para redes neuronales escrito C++ para aprendizaje profundo.
- Theano, una biblioteca código abierto de aprendizaje profundo para Python.
- Keras, una biblioteca código abierto de aprendizaje profundo para Python.
- PyTorch, una biblioteca código abierto de aprendizaje profundo para Python y está relacionada con Torch en términos del código C/C++ subyacente.
Referencias
[editar]- ↑ Ronan Collobert; Koray Kavukcuoglu; Clement Farabet (2011). «Torch7: A Matlab-like Environment for Machine Learning». Neural Information Processing Systems.
- ↑ «Estado de desarrollo reportado en Febrero de 2018».
- ↑ «Aviso de cierre de la comunidad de soporte de Torch7».
- ↑ KDnuggets Interview with Yann LeCun, Deep Learning Expert, Director of Facebook AI Lab
- ↑ Hacker News
- ↑ Yann Lecun's Facebook Page
- ↑ IDIAP Research Institute : Torch
- ↑ Torch-android GitHub repository
- ↑ Torch-ios GitHub repository
- ↑ «NeuFlow: A Runtime Reconfigurable Dataflow Processor for Vision». Archivado desde el original el 5 de mayo de 2017. Consultado el 3 de abril de 2017.
- ↑ «Facebook Open-Sources a Trove of AI Tools». Wired. 16 de enero de 2015.
Enlaces externos
[editar]- Sitio web oficial
- «Torch». Repository (7 edición). GitHub.