# PyTorch

PyTorch é uma biblioteca de aprendizado de máquina baseada na biblioteca Torch, usada para aplicações como visão computacional e processamento de linguagem natural, originalmente desenvolvida pela Meta AI e agora parte da Linux Foundation. Ela é reconhecida como uma das duas bibliotecas de aprendizado de máquina mais populares, juntamente com a TensorFlow, oferecendo software livre e de código aberto lançado sob a licença BSD modificada. Embora a interface Python seja mais refinada e seja o foco principal do desenvolvimento, o PyTorch também tem uma interface C++.
Vários softwares de aprendizagem profunda foram desenvolvidos com base no PyTorch, incluindo o Tesla Autopilot, o Pyro da Uber, os transformadores da Hugging Face, o PyTorch Lightning, e o Catalyst.
O PyTorch oferece dois recursos de alto nível:
* Computação de tensores (como o NumPy) com forte aceleração por meio de unidades de processamento gráfico (GPU)
* Redes neurais profundas construídas em um sistema de diferenciação automática baseado em fita

## Histórico

O Meta (anteriormente conhecido como Facebook) opera tanto o PyTorch quanto o Convolutional Architecture for Fast Feature Embedding (Caffe2), mas os modelos definidos pelas duas estruturas eram incompatíveis entre si. O projeto Open Neural Network Exchange (ONNX) foi criado pela Meta e pela Microsoft em setembro de 2017 para converter modelos entre estruturas. O Caffe2 foi incorporado ao PyTorch no final de março de 2018. Em setembro de 2022, a Meta anunciou que o PyTorch seria governado pela PyTorch Foundation, uma organização independente recém-criada - uma subsidiária da Linux Foundation.
O PyTorch 2.0 foi lançado em 15 de março de 2023.

## Tensores PyTorch

O PyTorch define uma classe chamada Tensor (torch.Tensor) para armazenar e operar em matrizes retangulares multidimensionais homogêneas de números. Os Tensores do PyTorch são semelhantes aos Arrays do NumPy, mas também podem ser operados em uma GPU NVIDIA compatível com CUDA. O PyTorch também está desenvolvendo suporte para outras plataformas de GPU, por exemplo, o ROCm da AMD e o Metal Framework da Apple.
O PyTorch oferece suporte a vários subtipos de Tensores.
Observe que o termo "tensor" aqui não tem o mesmo significado que tensor em matemática ou física. O significado da palavra em aprendizado de máquina está apenas superficialmente relacionado ao seu significado original como um certo tipo de objeto em álgebra linear. Os tensores no PyTorch são simplesmente matrizes multidimensionais.

## Redes neurais PyTorch

O PyTorch define um módulo chamado nn (torch.nn) para descrever redes neurais e dar suporte ao treinamento. Esse módulo oferece uma coleção abrangente de blocos de construção para redes neurais, incluindo várias camadas e funções de ativação, permitindo a construção de modelos complexos. As redes são criadas herdando o módulo torch.nn e definindo a sequência de operações na função forward.

## Exemplo

O programa a seguir mostra a funcionalidade de baixo nível da biblioteca com um exemplo simples:
O bloco de código a seguir mostra um exemplo da funcionalidade de nível superior fornecida pelo módulo nn. Uma rede neural com camadas lineares é definida no exemplo.