PyTorch入门(一)

前言

PyTorch 是一个有潜力能改变深度学习实现面貌的 Python 库,它的使用非常灵活与轻松。在本文中,我们将以更实用的方式探索 PyTorch,包括基础知识和案例研究等。此外,本文还将比较使用 NumPy 和 PyTorch 从头构建神经网络的方式,以了解它们在实现中的相似之处。
PyTorch 是一个基于 Python 的库,旨在为深度学习提供一个灵活的开发平台。PyTorch 的工作流程非常接近于 Python 的科学计算库 NumPy。那么为什么我们需要使用 PyTorch 构建深度学习模型?以下作者根据实际经验提供了三个理由:

  • 便于使用的 API:它的使用如同 Python 那样简单。
  • 支持 Python:正如上文所述,PyTorch 可以平滑地与 Python 数据科学栈相结合。它与 NumPy 一样简单,甚至我们都感觉不出它们的区别。
  • 动态计算图:PyTorch 不再采用特定的函数预定义计算图,而是提供构建动态计算图的框架,甚至我们可以在运行时修正它们。这种动态框架在我们不知道所构建的神经网络需要多少内存时非常有用。

使用过Tensorflow的同学一定知道,张量的声明和初始化有点繁琐。

其它一些使用 PyTorch 的优点还有多 GPU 支持、自定义数据加载器和极简的预处理过程等。自从它在 2016 年 1 月份发布以来,许多研究者将其采用为标准的实现库,因为它构建新颖的、极其复杂的计算图同样非常简单。即使这样,PyTorch 被主流数据科学家和研究员接收还是花了很长时间,因为它目前仍然是新的项目,且还有很多地方需要构建与完善。

Pytorch基础

相比较Tensorflow中静态的计算图而言,Pytorch中的计算图就要灵活的多,即使完整的计算图还没有完成构建,我们也可以独立地执行这些作为组件的小计算图,这种动态计算图被称为「define-by-run」方法。

  • window下Anconda安装Pytorch
    按照官方的方法conda install pytorch torchvision cuda91 -c pytorch,由于网络原因并不能完成,会报下面的错:
    PyTorch入门(一)
    最后参考这篇博客解决。(安装了半个小时)

  • PyTorch 张量
    在 PyTorch 中,torch.Tensor 是一种多维矩阵,其中每个元素都是一个单一的数据类型,且该构造函数默认的为 torch.FloatTensor。以下是具体张量的类型:
    PyTorch入门(一)
    除了直接定义维度,一般我们还可以从 Python 列表或 NumPy 数组中创建张量。而且根据 Python 列表和元组等数据结构的习惯,我们可以使用相似的索引方式进行取值或赋值等。以下通过 Python 列表创建一个 Torch 张量,并通过索引赋值:
    PyTorch入门(一)
    PyTorch入门(一)

    • 矩阵间对应元素乘积
      PyTorch入门(一)

      • 广播操作
        PyTorch入门(一)
  • 数学运算
    如 NumPy 一样,高效地实现数学函数对于科学计算库至关重要。PyTorch 提供了一个简单的接口,并支持 200 多种数学运算,以下是 PyTorch 实现简单加运算的过程:
    PyTorch入门(一)
    这种运算与 Python 非常像,我们可以在定义的 PyTorch 张量上执行多种矩阵运算。例如我们可以转置二维张量:
    PyTorch入门(一)