📜  PyTorch简介|什么是PyTorch

📅  最后修改于: 2020-11-10 06:20:35             🧑  作者: Mango

什么是Pytorch?

PyTorch是基于Torch库的计算机软件的一小部分。这是Facebook推出的深度学习框架。 PyTorch是用于Python编程语言的机器学习库,可用于诸如自然语言处理之类的应用程序。

PyTorch提供的高级功能如下:

  • 在图形处理单元(GPU)的帮助下,它以强大的加速度提供张量计算。
  • 它提供了基于基于磁带的自动差异系统构建的深度神经网络。

PyTorch的开发旨在在实施和构建深度学习神经网络时提供高度的灵活性和速度。如您所知,它是用于Python编程语言的机器学习库,因此安装,运行和理解非常简单。 Pytorch完全是pythonic语言(使用广泛采用的Python习惯用法,而不是编写Java和C++代码),因此它可以快速成功地构建神经网络模型。

PyTorch的历史

PyTorch于2016年发布。许多研究人员愿意越来越多地采用PyTorch。它由Facebook经营。 Facebook还运营Caffe2(用于快速特征嵌入的卷积架构)。将PyTorch定义的模型转换为Caffe2具有挑战性。为此,Facebook和Microsoft于2017年9月发明了一个开放式神经网络交换(ONNX)。简而言之,ONNX是为在框架之间转换模型而开发的。 Caffe2于2018年3月合并为PyTorch。

PyTorch可轻松构建极其复杂的神经网络。此功能很快使其成为了首选库。在研究工作中,它给TensorFlow带来了激烈的竞争。 PyTorch的发明者希望创建一个高度必要的库,该库可以轻松运行所有数值计算,最后,他们发明了PyTorch。深度学习科学家,机器学习开发人员和神经网络调试器要实时运行和测试部分代码面临着巨大挑战。 PyTorch完成了这一挑战,并允许他们实时运行和测试其代码。因此,他们不必等待检查它是否有效。

注意:要使用PyTorch功能和服务,可以使用Python程序包,例如NumPy,SciPy和Cython。

为什么要使用PyTorch?

为什么选择PyTorch? PyTorch的特殊之处在于构建深度学习模型的特殊之处。 PyTorch是一个动态库。动态库意味着灵活的库,您可以根据需要和更改使用该库。目前在Kaggle比赛中,整理者一直在使用它。

如此众多的功能使深度学习科学家可以将其用于构建深度学习模型。

这些功能如下。

简单的界面

PyTorch有一个非常简单的界面,如Python。它提供了一种使用API的简便方法。这个框架很容易像Python一样运行和操作。 PyTorch可以轻松地在Windows和Linux上理解或实现。

混合前端

PyTorch提供了一个新的混合前端,它在渴望模式下提供了灵活性和易用性,而最初是为了在C++运行时环境中实现速度,优化和功能而过渡到图形模式。

例如:

@torch.jit.script
 def Rnn(h, x, Wh, Uh, Wy, bh, by):
  y = []                                                     
  for t in range(x.size(0)):
      h = torch.tanh(x[t] @ Wh + h @ Uh + bh)
y += [torch.tanh(h @ Wy + by)]
      if t % 10 == 0:
          print("stats: ", h.mean(), h.var())
    return torch.stack(y), h

分布式培训

PyTorch允许开发人员以分布式方式训练神经网络模型。它借助对等通信的本地支持以及从Python和C++异步执行集体操作的方式,在研究和生产中均提供了优化的性能。

例如:

import torch.distributed as dist1 
from torch.nn.parallel import DistributedDataParallel
dist1.init_process_group(backend='gloo')
model = DistributedDataParallel(model)

Python优先

PyTorch完全基于Python。 PyTorch用于大多数流行的Python库和软件包,例如Cython和Numba。 PyTorch内置于Python。它的代码完全是pythonic。 Pythonic意味着使用广泛采用的Python习惯用法,而不是在代码中编写Java和C++代码。

例如:

import torch
import numpy as np
x = np.ones(5)
y = torch.from_numpy(x)
np.add(x, 1, out=x)
print(x)
print(y)

工具和库

丰富的工具和库生态系统可用于扩展PyTorch并支持计算机视觉和强化学习领域的开发。这个生态系统是由活跃的开发人员和研究人员社区开发的。这些生态系统帮助他们构建灵活,快速访问的深度学习神经网络。

例如:

import torchvision.models as models
resnet18 = models.resnet18(pretrained=True)
alexnet = models.alexnet(pretrained=True)
squeezenet = models.squeezenet1_0(pretrained=True)
vgg16 = models.vgg16(pretrained=True)
densenet = models.densenet161(pretrained=True)
inception = models.inception_v3(pretrained=True)

本机ONNX支持

ONNX是为在框架之间转换模型而开发的。要直接访问兼容ONNX的平台,运行时,可视化工具等,您需要在标准ONNX中导出模型。

例如:

import torch.onnx
import torchvision
dum_input = torch.randn(1, 3, 224, 224)
model = torchvision.models.alexnet(pretrained=True)
torch.onnx.export(model, dum_input, "alexnet.onnx")

C++前端

C++前端是PyTorch的C++接口,它遵循已建立的Python前端的设计和体系结构。它使人们能够进行高性能,低延迟和裸机C++应用程序的研究。

例如:

#include 
torch::nn::Linear model(num_features, 1);
torch::optim::SGD optimizer(model->parameters());
auto data_loader = torch::data::data_loader(dataset);
for (size_t epoch = 0; epoch < 10; ++epoch)
 {
      for (auto batch : data_loader) 
      {
          auto prediction = model->forward(batch.data);
          auto loss = loss_function(prediction, batch.target);
          loss.backward();
          optimizer.step();
    }
}

云合作伙伴

许多主要的云平台(例如AWS)都支持PyTorch。借助预建图像,GPU的大规模培训以及在生产规模环境中运行模型的能力等;它提供无摩擦的开发且易于缩放。

例如:

export IMAGE_FAMILY="pytorch-latest-cpu"
  export ZONE="us-west1-b"
  export INSTANCE_NAME="my-instance"
  gcloud compute instances create $INSTANCE_NAME \
  --zone=$ZONE \
  --image-family=$IMAGE_FAMILY \