天天看点

PyTorch | (1)初识PyTorch

PyTorch | (1)初识PyTorch

介绍

PyTorch是一个非常有可能改变深度学习领域前景的Python库。我尝试使用了几星期PyTorch,然后被它的易用性所震惊,在我使用过的各种深度学习库中,PyTorch是最灵活、最容易掌握的。

PyTorch | (1)初识PyTorch

PyTorch的概述

PyTorch的创始人说过他们创作的一个准则——他们想成为当务之急。这意味着我们可以立即执行计算。这正好符合Python的编程方法,不需要完成全部代码才能运行,可以轻松的运行部分代码并实时检查。对于我来说把它作为一个神经网络调试器是一件非常幸福的事。

PyTorch是一个基于Python的库,用来提供一个具有灵活性的深度学习开发平台。PyTorch的工作流程非常接近Python的科学计算库——numpy。

现在你可能会问,为什么我们要用PyTorch来建立深度学习模型呢?我可以列出三件有助于回答的事情:

·易于使用的API—它就像Python一样简单。

·Python的支持—如上所述,PyTorch可以顺利地与Python数据科学栈集成。它非常类似于numpy,甚至注意不到它们的差别。

·动态计算图—取代了具有特定功能的预定义图形,PyTorch为我们提供了一个框架,以便可以在运行时构建计算图,甚至在运行时更改它们。在不知道创建神经网络需要多少内存的情况下这非常有价值。

PyTorch的其他一些优点还包括:多gpu支持,自定义数据加载器和简化的预处理器。

自从2016年1月发布以来,许多研究人员将其作为一种“go-to”库,因为它可以轻松地构建新颖的甚至是极其复杂的图形。虽说如此,PyTorch仍有一段时间没有被大多数数据科学实践者采用,因为它是新的而且处于“正在建设”的状态。

PyTorch基础概念

PyTorch 是一个建立在 Torch 库之上的 Python 包,旨在加速深度学习应用。

PyTorch 提供一种类似 NumPy 的抽象方法来表征张量(或多维数组,标量是零级张量、向量是一阶张量,矩阵是二阶张量),它可以利用 GPU 来加速训练。在神经网络中Torch可以替换Numpy。

而PyTorch相比TensorFlow,其最大的优点是建立的神经网络是动态的,相比静态的TensorFlow,它能更加有效地去处理一些问题,比如RNN变化时间长度的输出,TensorFlow相比PyTorch的有点在于分布式训练上。

PyTorch | (1)初识PyTorch

Tensor和Numpy之间的转换(Numpy桥)

import torch
import numpy as np
 
np_data = np.arange(6).reshape((2, 3))
torch_data = torch.from_numpy(np_data)
tensor2array = torch_data.numpy()
print(
    '\nnumpy', np_data,
    '\ntorch', torch_data,
    '\ntensor2array', tensor2array
)      

 运行结果:

numpy [[0 1 2]
 [3 4 5]] 
torch tensor([[0, 1, 2],
        [3, 4, 5]], dtype=torch.int32) 
tensor2array [[0 1 2]
 [3 4 5]]      

张量

张量(Tensor)是线性代数中的一种数据结构,是向量和矩阵的推广,我们可以在张量上进行算术运算。

import torch 
x = torch.ones(2,3,4) 
print(x)       

输出:

tensor([[[1., 1., 1., 1.],
        [1., 1., 1., 1.],
        [1., 1., 1., 1.]],
 
       [[1., 1., 1., 1.],
        [1., 1., 1., 1.],
        [1., 1., 1., 1.]]])      
  • Tensor与numpy的Array之间的相互转换时,要时刻注意Tensor和numpy的Array共享潜在的内存,改变其中任一值,另外一个也会相应改变
  • 如果安装了GPU版(CUDA张量)的Pytorch,可将张量转移到GPU上进行计算,从而可以提高运算效率