PyTorch入门教程

简介: 本文将讲解如何入门PyTorch,包括基础原理知识、numpy与PyTorch的区别以及案例研究实例。

介绍

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

在本文中,我们将讲解如何入门PyTorch,包括基础知识和案例研究。还将分别在numpy和PyTorch中从零开始构建神经网络,以了解它们在实践中的相似处与区别。

目录

·PyTorch的概述

·深入研究技术细节

·在Numpy和PyTorch中分别构建神经网络并进行对比

·与其它深度学习库比较

·案例研究——用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使用了命令式/热切的范例。也就是说,在构建一个图形时,每一行代码都定义了改图的一个组件。我们甚至能在图形构建完成前,独立的对这些组件进行计算。这就是所谓的“逐运行”方法。

来源: http://pytorch.org/about/

安装PyTorch非常简单。您可以按照官方文档中提到的步骤操作,并根据您的系统规格运行命令。例如,这是我根据我选择的选项使用的命令:

conda install pytorch torchvision cuda91 -c pytorch 

在开始使用PyTorch时应该了解的主要元素:

·PyTorch张量

·数学运算

·Autograd模块

·Optim模块

·神经网络模块

下面让我们依次介绍这些元素吧。

PyTorch张量

张量只是多维数组。PyTorch中的张量类似于numpy的ndarrays,另外,张量也可以在GPU上使用。PyTorch支持各种类型的张量

你可以如下定义一个简单的一维矩阵:


数学运算

与numpy一样,科学计算库非常重要的一点是能够实现高效的数学功能。而PyTorch提供了一个类似的借口,可以使用200个以上的数学运算。

下面是在PyTorch中实现一个简单的添加操作的例子:

这和基本的python方法非常相似。我们还可以在定义的PyTorch张量上执行各种矩阵运算。例如,我们要转置一个二维矩阵:

Autograd模块

PyTorch使用了一种叫做自动微分的技术。也就是说,它会有一个记录我们所有执行操作的记录器,之后再回放记录来计算我们的梯度。这一技术在构建神经网络时尤其有效,因为我们可以通过计算前路参数的微分来节省时间。

来源: http://pytorch.org/about/

Optim模块

Torch.optim是一个实现各种优化算法的模块,用于构建神经网络。它支持大多数常用的方法,因此我们不必从头开始构建它们。

下面是使用Adam优化器的代码:

optimizer = torch.optim.Adam(model.parameters(), lr=learning_rate)

神经网络模块

虽然PyTorch Autograd可以很容易的定义计算图形和使用梯度,但是对于定义复杂的神经网络来说可能有点太低级了。而这就需要神经网络模块来提供帮助。

nn包定义了一组模块,我们可以把它看作是一个神经网络层,它产生输入输出,并且可能有一些可训练的权重。

你可以把nn模块看作是PyTorch的内核!


现在您已经了解了PyTorch的基本组件,那么可以轻松地从头构建自己的神经网络了。如果想知道怎么做,就继续往下看吧。

分别在Numpy和PyTorch中构建神经网络并比较

我之前提到过PyTorch和Numpy非常相似,现在让我们看看原因。在本节中,我们将通过实现一个简单的神经网络来解决二进制分类问题。

现在,试着在PyTorch中以超级简单的方式发现差异(在下面的代码中用粗体表示差异)。

与其它深度学习库比较

通过这个基准测试脚本中可以看出,PyTorch训练一个长短期记忆网络(LSTM)的过程比其他所有主要的深度学习库都要出色,因为它在每个时代的中位时间都最低(参考下图)。

PyTorch中用于数据加载的API设计的非常好,它的接口可以在数据集、采样器和数据加载器中指定。并且通过与TensorFlow(读取器、队列等)数据加载工具比较发现,PyTorch的数据加载模块非常容易使用。此外,PyTorch在构建神经网络时是无缝的,所以不必依赖像Keras这样的第三方高层库。

另一方面,我也不建议使用PyTorch进行部署。因为它还尚未发展完美。正如PyTorch开发者说:“我们能够看到,用户会首先创建一个PyTorch模型,当要把模型投入生产时会将其转换为Caffe2模型,之后再运送到移动平台或其他平台。”

案例研究——解决PyTorch中的图像识别问题

为了更加熟悉PyTorch,我们将实践解决分析Vidhya的深度学习问题——识别数字。让我们看看我们的问题陈述:

我们的问题是图像识别问题,从一个给定的28x28图像中识别数字。一部分图像用于训练,其余的用于测试模型。

首先下载train和测试文件。该数据集包含所有图像的压缩文件,以及具有相应train和测试图像名称的train.csv和test.csv文件。数据集只提供png格式原始图像,不提供其它附加功能。

现在让我们开始吧:

步骤0:准备

a)导入所有必要的库。

b)设置一个种子值,这样我们就可以控制模型的随机性。

c)安全起见,第一步设置目录路径。

步骤1:数据加载和预处理

A)现在让我们看看这些数据集。它们都有相应标签文件名,并且是.csv格式。

B)让我们看看数据是什么样的,现在读取图像并显示。



C)为了更容易操作,让我们把所以图像存储为numpy数组。

D)由于这是一个典型的机器语言(ML)问题,为了测试模型的正常运行,我们创建了一个验证集。训练集与验证集比例为70:30。

步骤2:构建模型

A)这是最重要的部分!首先定义神经网络架构。我们定义了一个具有输入、隐藏和输出三层的神经网络。输入和输出中的神经元数目是固定的,因为输入是28x28的图像,输出是一个10x1向量的代表类,而在隐藏层我们采用了50个神经元。在这里,我们用Adam作为优化算法,这是梯度下降算法的有效变体。

B)训练模型。


训练成绩如下:

0.8779008746355685

而验证分数为:

0.867482993197279

这是一个相当令人印象深刻的分数,尤其是这个非常简单的神经网络我们只训练了5次。

希望这篇文章能让您看到PyTorch是如何改变构建深度学习模型的。在本文中,我们只是触及了表面。要想深入研究,您可以从PyTorch官网下载相关文档教程

本文由北邮@爱可可-爱生活 老师推荐,阿里云云栖社区组织翻译。

文章原标题《An Introduction to PyTorch - A Simple yet Powerful Deep Learning Library》

作者:Faizan Shaikh

译者:奥特曼,审校:袁虎。

文章为简译,更为详细的内容,请查看原文

相关文章
|
数据可视化 PyTorch 算法框架/工具
量化自定义PyTorch模型入门教程
在以前Pytorch只有一种量化的方法,叫做“eager mode qunatization”,在量化我们自定定义模型时经常会产生奇怪的错误,并且很难解决。但是最近,PyTorch发布了一种称为“fx-graph-mode-qunatization”的方方法。在本文中我们将研究这个fx-graph-mode-qunatization”看看它能不能让我们的量化操作更容易,更稳定。
242 0
|
机器学习/深度学习 数据可视化 数据挖掘
PyTorch Geometric (PyG) 入门教程
PyTorch Geometric是PyTorch1的几何图形学深度学习扩展库。本文旨在通过介绍PyTorch Geometric(PyG)中常用的方法等内容,为新手提供一个PyG的入门教程。
PyTorch Geometric (PyG) 入门教程
|
机器学习/深度学习 并行计算 PyTorch
【Pytorch】2022 Pytorch基础入门教程(完整详细版)
Pytorch是torch的python版本,是由Facebook开源的神经网络框架,专门针对 GPU 加速的深度神经网络(DNN)编程。Torch 是一个经典的对多维矩阵数据进行操作的张量(tensor )库,在机器学习和其他数学密集型应用有广泛应用。与Tensorflow的静态计算图不同,pytorch的计算图是动态的,可以根据计算需要实时改变计算图。但由于Torch语言采用 Lua,导致在国内一直很小众,并逐渐被支持 Python 的 Tensorflow 抢走用户。
796 0
|
PyTorch 算法框架/工具
【pytorch】孪生网络Siamese network入门教程
孪生网络Siamese network入门教程,内含详细代码
【pytorch】孪生网络Siamese network入门教程
|
机器学习/深度学习 PyTorch 算法框架/工具
pytorch深度学习快速入门教程
pytorch深度学习快速入门教程
140 0
pytorch深度学习快速入门教程
|
机器学习/深度学习 PyTorch 算法框架/工具
Pytorch入门教程
概念:由Facebook人工智能研究小组开发的一种基于Lua编写的Torch库的Python实现的深度学习库。 优势:简洁、上手快、具有良好的文档和社区支持、项目开源、支持代码调试、丰富的扩展库
487 0
Pytorch入门教程
|
1月前
|
算法 PyTorch 算法框架/工具
Pytorch学习笔记(九):Pytorch模型的FLOPs、模型参数量等信息输出(torchstat、thop、ptflops、torchsummary)
本文介绍了如何使用torchstat、thop、ptflops和torchsummary等工具来计算Pytorch模型的FLOPs、模型参数量等信息。
189 2
|
1月前
|
机器学习/深度学习 自然语言处理 监控
利用 PyTorch Lightning 搭建一个文本分类模型
利用 PyTorch Lightning 搭建一个文本分类模型
57 8
利用 PyTorch Lightning 搭建一个文本分类模型
|
1月前
|
机器学习/深度学习 自然语言处理 数据建模
三种Transformer模型中的注意力机制介绍及Pytorch实现:从自注意力到因果自注意力
本文深入探讨了Transformer模型中的三种关键注意力机制:自注意力、交叉注意力和因果自注意力,这些机制是GPT-4、Llama等大型语言模型的核心。文章不仅讲解了理论概念,还通过Python和PyTorch从零开始实现这些机制,帮助读者深入理解其内部工作原理。自注意力机制通过整合上下文信息增强了输入嵌入,多头注意力则通过多个并行的注意力头捕捉不同类型的依赖关系。交叉注意力则允许模型在两个不同输入序列间传递信息,适用于机器翻译和图像描述等任务。因果自注意力确保模型在生成文本时仅考虑先前的上下文,适用于解码器风格的模型。通过本文的详细解析和代码实现,读者可以全面掌握这些机制的应用潜力。
58 3
三种Transformer模型中的注意力机制介绍及Pytorch实现:从自注意力到因果自注意力
|
2月前
|
机器学习/深度学习 PyTorch 调度
在Pytorch中为不同层设置不同学习率来提升性能,优化深度学习模型
在深度学习中,学习率作为关键超参数对模型收敛速度和性能至关重要。传统方法采用统一学习率,但研究表明为不同层设置差异化学习率能显著提升性能。本文探讨了这一策略的理论基础及PyTorch实现方法,包括模型定义、参数分组、优化器配置及训练流程。通过示例展示了如何为ResNet18设置不同层的学习率,并介绍了渐进式解冻和层适应学习率等高级技巧,帮助研究者更好地优化模型训练。
141 4
在Pytorch中为不同层设置不同学习率来提升性能,优化深度学习模型