近日,呆板之心在 GitHub 上发现了一个 DIY 教学库——MiniTorch,该库适用于希望了解深度进修(DL)零碎底层实质概念的呆板进修工程师。MiniTorch 是一个 Torch API 的纯 Python 重新实现,展示了从零开始建立一个张量和主动微分库。最终得到的库能够运行 Torch 代码。
项目地址:https://github.com/minitorch/minitorch项目创造者为康奈尔大学副教授(pre-tenure)Alexander Rush,该项目是为纽约校区 Cornell Tech 的「呆板进修工程」课程开发的。这是一门硕士课程,涵盖了训练、调整、调试、可视化和部署 ML 零碎中的零碎级问题。
在开始建立库之前,用户首先必要根据 Setup 的步骤创造自己的工作区域(workspace)。Setup 地址:https://minitorch.github.io/setup然后,按照如下顺序创造必要的模块:模块 0:Fundamental模块 1:Autodiff模块 2:Tensors模块 3:Efficiency模块 4:Networks项目必要极少的计算资源。用户可在 GitHub 上找到模块启动代码,并且每一个模块都从前面的模块中获得增益。模块 0:FundamentalsFundamentals 一个入门模块,主要介绍了几种用于之后模块中测试和调试的核心技术,也涵盖了一些基础的数学基础。用户在这个模块中将开始建立 MiniTorch 的一些基础设施。
一切的启动代码可见:https://github.com/minitorch/Module-0此外,每一个模块有一组指南(Guides)来帮助完成这些任务。模块 1:AutodiffAutodiff 是在模块 0 的基础上建立的,向用户展示了如何仅利用标量(scalar)值来创造 MiniTorch 的第一个版本(mini-MiniTorch),涵盖了零碎中的关键技术——主动微分。然后,用户即可以利用代码训练一个原始模型。
一切的启动代码可见:https://github.com/minitorch/Module-1开始前,记得首先要激活自己的虚拟环境,然后 clone 设置:
模块 2:Tensors现在已经有了一个围绕标量建立的完全开发的主动微分零碎。但是,该零碎在训练期间效率低下。每一个标量值必要建立一个对象,并且每一个操纵必要存储之前创造的一切值的图。训练必要重复上述操纵,运行线性模型等模型必要对网络中的每一个项进行 for 循环。Tensors 模块引入和实现的一个张量(tensor)对象可以解决这些问题。张量将很多重复的操纵组合在一起,以节省 Python 开销并将组合后的操纵传递给更快的实现。
一切启动器代码可见:https://github.com/minitorch/Module-2开始前,用户依然首先要激活虚拟环境,然后 clone 设置:
模块 3:Efficiency除了有助于简化代码之外,张量还为加速计算提供了基础。事实上,它们确实是利用 Python 等慢速语言高效编写深度进修代码的唯一方法。然而,到目前为止,我们所做的一切都没有比基本面更快。该模块专注于利用张量编写快速代码,首先在标准 CPU 上,然后利用 GPU。
一切启动器代码可见:https://github.com/minitorch/Module-3同模块 1 和模块 2 一样,用户必要首先激活虚拟环境,然后 clone 设置:
模块 4:Networks
我们现在拥有一个功能齐全的深度进修库,具有像 Torch 这样的真实工业零碎的大部分功能。为了利用这项艰苦的工作,该模块完全基于利用软件框架。特别是,我们将建立一个图像识别零碎。我们将通过为 MNIST 上的 LeNet 版本建立基础架构来实现这一点:用于数字识别的经典卷积神经网络 (CNN),以及用于 NLP 情感分类的 1D conv。
一切启动器代码可见:https://github.com/minitorch/Module-4用户依然必要激活虚拟环境,并 clone 设置:
此外,用户还必要安置和下载一个 MNIST 库。注意,Mac OS 用户可能必要安置 wget 来运行. sh 文件。
这样会在模块中添加一个 data / 目录。用户可以尝试用以下代码对安置进行测试:
原创文章,作者:机器之心,如若转载,请注明出处:https://www.iaiol.com/news/31425