David关于如何阅读Pytorch的建议
这五个Python笔记本是Pytorch核心习惯用法的图解介绍。点击下方链接在Colab上运行它们。
- 张量运算:在CPU或GPU上操作n维数字数组的表示法。
- 自动微分:如何获得任何标量相对于任何张量输入的导数。
- 优化:使用自动微分梯度更新张量参数以减少任何计算目标的方法。
- 网络模块:Pytorch如何表示神经网络,以便于组合、训练和保存。
- 数据集和数据加载器:用于高效多线程预取大数据流。
Pytorch是一个数值库,它使在GPU硬件上训练深度网络变得非常方便。它引入了一种新的编程词汇,比普通的数值Python代码更进一步。虽然Pytorch代码看起来简单直观,但实际发生的许多细节是不可见的,所以在使用Pytorch代码时,彻底理解其运行时模型会很有帮助。
例如,考虑这段代码:
torch.nn.cross_entropy(model(images.cuda()), labels.cuda()).backward()
optimizer.step()
它看起来像是计算了images
和labels
的某个函数,但没有存储结果。实际上,这段代码的目的是更新一些在公式中并不明确的隐藏参数。这行代码将批量的图像和标签数据从CPU移动到GPU;运行神经网络进行预测;构建一个描述损失如何依赖于网络参数的计算图;为每个网络参数添加梯度注释;最后运行一步优化来调整模型的每个参数。在整个过程中,CPU不会看到任何实际的结果。这是出于速度考虑而有意为之的。所有的数值计算都在GPU上异步完成并保留在那里。
代码的简洁性使得编写Pytorch代码变得有趣。但这也反映了为什么Pytorch即使在Python解释器如此慢的情况下也能如此快速。虽然主要的Python逻辑在单个非常慢的CPU线程中顺序执行,但仅仅几条Python指令就可以将大量工作加载到GPU中。这意味着程序可以让GPU忙于处理大量数值计算,大部分情况下无需等待Python解释器。
理解使这成为可能的五种习惯用法是值得的。此目录中的五个笔记本是对这些习惯用法的快速概述。
关键ideas通过小型、可运行、可调整的示例进行说明,并提供了其他参考材料和资源的链接。
所有笔记本都可以在Google Colab上运行,那里可以免费使用GPU。或者它们可以在您自己的本地Jupyter笔记本服务器上运行。这些示例应该都可以在Python 3.5或更新版本和Pytorch 1.0或更新版本上运行。
--- David Bau,2020年7月
(David是MIT的博士生和前谷歌工程师。他的研究致力于深度网络的透明度。)