PyTorch 进阶之路(一):张量与梯度

工具 你找不到我 ⋅ 于 1个月前 ⋅ 426 阅读

分享一个PyTorch进阶之路的系列文章,后续会继续跟进更新,欢迎关注~
作者:Aakash N S
来源:机器之心
https://mp.weixin.qq.com/s/O4ctpg7bBHRNBDtXvFNhfA

file
PyTorch 是 Facebook 开发和维护的一个开源的神经网络库,近来的发展势头相当强劲,也有越来越多的开发者为其撰写教程,本文也是其中之一。这是「PyTorch: Zero to GANs」系列教程的第一篇,介绍了 PyTorch 模型的基本构件:张量和梯度。


完整系列教程包括:

本系列教程旨在让用户更好地利用 PyTorch 学习深度学习和神经网络。本文将介绍 PyTorch 模型的基本构件:张量和梯度。


系统设置

本教程采用代码优先的方法来学习 PyTorch,你应该尝试自己运行和实验代码。我们将使用 Python 的 Anaconda 分布来安装代码库并管理虚拟环境。对于交互式编码和实验,我们将使用 Jupyter notebook。本系列所有教程的 Jupyter notebook 都可从 Jovian(Jupyter 的共享协作平台)上获取。本文的 notebook 可以从以下地址获得:https://jvn.io/aakashns/e5cfe043873f4f3c9287507016747ae5



通过在 Jupyter 内部直接运行单个命令,Jovian 使得在云端共享 Jupyter notebook 变得很容易。它还可以捕获你运行 notebook 所需的 Python 环境和库,因此任何人(包括你自己)都能复现你的研究。


操作步骤如下:

  1. 根据以下指南安装 Anaconda。你可能还要将 Anaconda 二进制文件添加到 PATH 系统中,以便能够运行 conda 命令行工具。

指南地址:https://conda.io/projects/conda/en/latest/user-guide/install/index.html


  1. 通过在 Mac/Linux 终端或 Windows 命令提示符下运行以下命令(不要$)来安装 jovian Python 库:

$ pip install jovian --upgrade


  1. 使用 jovian clone 命令下载本文的 notebook:

$ jovian clone e5cfe043873f4f3c9287507016747ae5

这样做可以创建目录 01-pytorch-basics,包含 Jupyter notebook 和 Anaconda 环境文件夹。

$ ls 01-pytorch-basics
01-pytorch-basics.ipynb  environment.yml


  1. 现在我们可以打开目录,使用 conda 通过单个命令安装所需的 Python 库(Jupyter、PyTorch 等):
$ cd 01-pytorch-basics
$ conda env update


  1. 通过运行以下命令,激活虚拟环境:

$ conda activate 01-pytorch-basics

对于旧版 conda 的安装,你可能需要运行命令:source activate 01-pytorch-basics。


  1. 一旦激活了虚拟环境,我们通过运行以下命令来启动 Jupyter:

$ jupyter notebook


  1. 现在,你可以通过点击终端上显示的链接或访问 http://localhost:8888 来访问 Jupyter 的 web 界面。

file

然后,你可以点击 01-pytorch-basics.ipynb 文件夹,打开它然后运行代码。如果想自己输入代码,你还可以通过点击「New」键来创建新的 notebook。

首先导入 PyTorch:

file


张量

本质上来说,PyTorch 是一个处理张量的库。一个张量是一个数字、向量、矩阵或任何 n 维数组。我们用单个数字创建一个张量:

file

  1. 是 4.0 的缩写。它用来表示你想创建浮点数的 Python(和 PyTorch)。我们可以通过检查张量的 dtype 属性来验证这一点:

file


我们可以试着创建复杂一点的张量:

file

张量可以有任何维数。每个维度有不同的长度。我们可以用张量的.shape 属性来查看每个维度的长度。

file


张量运算和梯度

我们可以将张量与常用的算数运算相结合。如下:
file

我们已经创建了 3 个张量:x、w 和 b。w 和 b 有额外的参数 requires_grad,设置为 True。一会儿就可以看看它能做什么。

通过结合这些张量,我们可以创建新的张量 y。

file

如预期所料,y 是值为 3 * 4 + 5 = 17 的张量。PyTorch 的特殊之处在于,我们可以自动计算 y 相对于张量(requires_grad 设置为 True)的导数,即 w 和 b。为了计算导数,我们可以在结果 y 上调用.backward 方法。

file

y 相对于输入张量的导数被存储在对相应张量的.grad 属性中。

file

如预期所料,dy/dw 的值与 x 相同(即 3),dy/db 的值为 1。注意,x.grad 的值为 None,因为 x 没有将 requires_grad 设为 True。w_grad 中的「grad」代表梯度,梯度是导数的另一个术语,主要用于处理矩阵。


与 Numpy 之间的互操作性

Numpy 是 Python 中用于数学和科学计算的流行开源库。它支持在大型多维数组上进行高效运算,拥有一个支持多个库的大型生态系统。这些库包括:

  • 用于画图、可视化的 Matplotlib
  • 用于图像和视频处理的 OpenCV
  • 用于文件 I/O 和数据分析的 Pandas


PyTorch 并没有重新创造 wheel,而是与 Numpy 很好地交互,以利用它现有的工具和库生态系统。

file

可以用 torch.fron_numpy 将 Numpy 数组转化为 PyTorch 张量。

file

接下来可以验证 Numpy 数组和 PyTorch 张量是否拥有类似的数据类型。
file

可以使用张量的.to_numpy 方法将 PyTorch 张量转化为 Numpy 数组。

file

PyTorch 和 Numpy 之间的互操作性真的非常重要,因为你要用的大部分数据集都可能被读取并预处理为 Numpy 数组。


提交及上传 notebook

最后一步是保存并利用 jovian 库提交以上工作

file

Jovian 将 notebook 上传到 https://jvn.io (https://jvn.io/),用以上方式为你的 notebook 捕获 Python 环境并创建可共享的链接。你可以利用这一链接分享自己的作品,让任何人都可以利用 jovian clone 命令轻松复现。Jovian 还拥有一个强大的评论界面,供你和其他人讨论及评论你 notebook 中的某个部分:

file


延伸阅读

PyTorch 中的张量支持很多运算,这里列出的并不详尽。如果你想了解更多关于张量和张量运算的信息,可参考以下地址:

链接:https://pytorch.org/docs/stable/tensors.html


如果你想利用交互式 Jupyter 环境的优势来进行张量实验并尝试上述的各种不同运算组合,可以尝试下面这些:

  • 如果上面提到的例子中,一个或多个「x」、「w」或「b」是矩阵,而不是数字,该怎么办?在这种情况下,结果「y」、梯度 w.grad 和 b.grad 看起来将是怎样的?
  • 如果「y」是用 torch.tensor 创建的矩阵,矩阵的每个元素都表示为数字张量「x」、「w」和「b」的组合,该怎么办?
  • 如果我们有一个运算链,而不止一个运算,即 y = x w + b, z = l y + m, e =c * z + d,该怎么办?调用 e.backward() 会发生什么?


如果你对此感兴趣,且想了解更多关于矩阵导数的信息,可以参考:

链接:https://en.wikipedia.org/wiki/Matrix_calculus#Derivatives_with_matrices


以上,我们完成了关于 PyTorch 中张量和梯度的讨论,下一步的主题将是线性回归。

该系列文章主要受到下面两篇文章的启发:





推荐阅读
pytorch 实用工具总结
快速上手笔记,PyTorch 模型训练实用教程(附代码)

成为第一个点赞的人吧 :bowtie:
回复数量: 0
暂无回复~
您需要登陆以后才能留下评论!