PyTorch es una biblioteca de aprendizaje automático basada en la biblioteca Torch , [4] [5] [6] utilizada para aplicaciones como visión artificial y procesamiento de lenguaje natural , [7] desarrollada originalmente por Meta AI y ahora parte del paraguas de Linux Foundation . [8] [9] [10] [11] Es uno de los marcos de aprendizaje profundo más populares , junto con otros como TensorFlow y PaddlePaddle [12] [13] , que ofrece software gratuito y de código abierto publicado bajo la licencia BSD modificada . Aunque la interfaz de Python está más pulida y es el foco principal del desarrollo, PyTorch también tiene una interfaz de C++ . [14]
Varios programas de aprendizaje profundo se basan en PyTorch, incluidos Tesla Autopilot , [15] Pyro de Uber , [16] Transformers de Hugging Face , [17] PyTorch Lightning , [18] [19] y Catalyst. [20] [21]
PyTorch proporciona dos características de alto nivel: [22]
Meta (antes conocida como Facebook) opera tanto con PyTorch como con Caffe2 (Convolutional Architecture for Fast Feature Embedding ), pero los modelos definidos por ambos frameworks eran mutuamente incompatibles. El proyecto Open Neural Network Exchange ( ONNX ) fue creado por Meta y Microsoft en septiembre de 2017 para convertir modelos entre frameworks. Caffe2 se fusionó con PyTorch a fines de marzo de 2018. [23] En septiembre de 2022, Meta anunció que PyTorch sería gobernado por la PyTorch Foundation independiente, una subsidiaria recién creada de la Linux Foundation . [24]
PyTorch 2.0 se lanzó el 15 de marzo de 2023 y presenta TorchDynamo, un compilador de nivel Python que hace que el código se ejecute hasta dos veces más rápido, junto con mejoras significativas en el rendimiento de entrenamiento e inferencia en las principales plataformas de nube . [25] [26]
PyTorch define una clase llamada Tensor ( torch.Tensor
) para almacenar y operar sobre matrices rectangulares multidimensionales homogéneas de números. Los tensores de PyTorch son similares a las matrices NumPy , pero también se pueden operar en una GPU NVIDIA compatible con CUDA . PyTorch también ha estado desarrollando soporte para otras plataformas de GPU, por ejemplo, ROCm de AMD [27] y Metal Framework de Apple . [28]
PyTorch admite varios subtipos de tensores. [29]
Tenga en cuenta que el término "tensor" aquí no tiene el mismo significado que tensor en matemáticas o física. El significado de la palabra en el aprendizaje automático solo se relaciona superficialmente con su significado original como un cierto tipo de objeto en álgebra lineal . Los tensores en PyTorch son simplemente matrices multidimensionales.
PyTorch define un módulo llamado nn( torch.nn
) para describir redes neuronales y brindar soporte para el entrenamiento. Este módulo ofrece una colección completa de bloques de construcción para redes neuronales, incluidas varias capas y funciones de activación, lo que permite la construcción de modelos complejos. Las redes se construyen heredando del torch.nn
módulo y definiendo la secuencia de operaciones en la forward()
función.
El siguiente programa muestra la funcionalidad de bajo nivel de la biblioteca con un ejemplo simple.
antorcha de importacióndtype = antorcha .floatdispositivo = antorcha . dispositivo ( "cpu" ) # Ejecuta todos los cálculos en la CPU# device = antorcha.device("cuda:0") # Ejecuta todos los cálculos en la GPU# Crea un tensor y rellénalo con números aleatoriosa = antorcha . randn ( 2 , 3 , dispositivo = dispositivo , dtype = dtype )imprimir ( a )# Salida: tensor([[-1.1884, 0.8498, -1.7129],# [-0,8816, 0,1944, 0,5847]])b = antorcha . randn ( 2 , 3 , dispositivo = dispositivo , dtype = dtype )imprimir ( b )# Salida: tensor([[ 0.7178, -0.8453, -1.3403],# [1,3262, 1,1512, -1,7070]])imprimir ( a * b )# Salida: tensor([[-0.8530, -0.7183, 2.58],# [-1,1692, 0,2238, -0,9981]])imprimir ( a . suma ()) # Salida: tensor(-2.1540)print ( a [ 1 , 2 ]) # Salida del elemento en la tercera columna de la segunda fila (basado en cero)# Salida: tensor(0.5847)imprimir ( a . max ())# Salida: tensor(0.8498)
El siguiente bloque de código define una red neuronal con capas lineales utilizando el nn
módulo.
antorcha de importacióndesde la antorcha import nn # Importa el submódulo nn desde PyTorchclase NeuralNetwork ( nn.Módulo ): # Las redes neuronales se definen como clases def __init__ ( self ): # Las capas y variables se definen en el método __init__ super () .__ init__ () # Debe estar en cada red. self . flatten = nn . Flatten () # Construye una capa de aplanamiento. self . linear_relu_stack = nn . secuencial ( # Construye una pila de capas. nn . Lineal ( 28 * 28 , 512 ), # Las capas lineales tienen una forma de entrada y salida nn . ReLU (), # ReLU es una de las muchas funciones de activación proporcionadas por nn nn . Lineal ( 512 , 512 ), nn .ReLU () , nn . Lineal ( 512 , 10 ), ) def forward ( self , x ): # Esta función define el pase hacia adelante. x = self . flatten ( x ) logits = self .linear_relu_stack ( x ) logits de retorno
FAIR está acostumbrado a trabajar con PyTorch, un marco de aprendizaje profundo optimizado para lograr resultados de vanguardia en la investigación, independientemente de las limitaciones de recursos. Desafortunadamente, en el mundo real, la mayoría de nosotros estamos limitados por las capacidades computacionales de nuestros teléfonos inteligentes y computadoras.
{{cite web}}
: La cita tiene un parámetro desconocido vacío: |1=
( ayuda )