PyTorch学习教程
文章平均质量分 91
yanglamei1962
一个快乐的程序员老奶奶
展开
-
计算机视觉教程的量化转移学习
在本部分中,您将使用“冻结”量化特征提取器,并在其顶部训练自定义分类器头。与浮点模型不同,您不需要为量化模型设置 require_grad = False,因为它没有可训练的参数。请参阅文档了解更多详细信息。加载预训练的模型:在本练习中,您将使用ResNet-18。此时,您需要修改预训练模型。该模型在开始和结束时都有量化/去量化块。但是,由于只使用要素提取器,因此反量化层必须在线性层(头部)之前移动。最简单的方法是将模型包装在模块中。第一步是在 ResNet 模型中隔离特征提取器。原创 2023-08-28 06:00:00 · 167 阅读 · 0 评论 -
在 PyTorch 中使用 Eager 模式进行静态量化
作为最后的主要设置步骤,我们为训练和测试集定义了数据加载器。原创 2023-08-27 05:30:00 · 407 阅读 · 0 评论 -
LSTM Word 语言模型上的(实验)动态量化
在这里,我们根据词语言模型示例中的模型定义 LSTM 模型体系结构。原创 2023-08-26 11:03:44 · 750 阅读 · 0 评论 -
单机模型并行最佳实践
模型并行在分布式训练技术中被广泛使用。先前的帖子已经解释了如何使用在多个 GPU 上训练神经网络;此功能将相同的模型复制到所有 GPU,其中每个 GPU 消耗输入数据的不同分区。尽管它可以极大地加快训练过程,但不适用于某些模型太大而无法放入单个 GPU 的用例。这篇文章展示了如何通过使用解决该问题,与相比,该模型将单个模型拆分到不同的 GPU 上,而不是在每个 GPU 上复制整个模型(具体来说, 假设模型m包含 10 层:使用。原创 2023-08-19 08:27:04 · 135 阅读 · 0 评论 -
将模型从 PyTorch 导出到 ONNX 并使用 ONNX Runtime 运行
在本教程中,我们描述了如何将 PyTorch 中定义的模型转换为 ONNX 格式,然后在 ONNX Runtime 中运行它。ONNX Runtime 是针对 ONNX 模型的以性能为中心的引擎,可在多个平台和硬件(Windows,Linux 和 Mac 以及 CPU 和 GPU 上)高效地进行推理。如所述,事实证明,ONNX Runtime 可大大提高多个模型的性能。对于本教程,您将需要安装和。您可以使用获得 ONNX 和 ONNX Runtime 的二进制版本。原创 2023-08-08 07:30:00 · 141 阅读 · 0 评论 -
在 C ++中加载 TorchScript 模型
顾名思义,PyTorch 的主要接口是 Python 编程语言。尽管 Python 是许多需要动态性和易于迭代的场景的合适且首选的语言,但是在同样许多情况下,Python 的这些属性恰恰是不利的。后者经常应用的一种环境是_生产_ –低延迟和严格部署要求的土地。对于生产场景,即使仅将 C ++绑定到 Java,Rust 或 Go 之类的另一种语言中,它也是经常选择的语言。原创 2023-08-07 08:15:00 · 113 阅读 · 0 评论 -
TorchScript 的简介,TorchScript 是 PyTorch 模型(`nn.Module`的子类)的中间表示形式,可以在高性能环境(例如 C ++)中运行
本教程是 TorchScript 的简介,TorchScript 是 PyTorch 模型(nn.Module的子类)的中间表示形式,可以在高性能环境(例如 C ++)中运行。forward我们希望在完成本教程后,您将继续学习,该教程将引导您完成一个从 C ++实际调用 TorchScript 模型的示例。1.4.0。原创 2023-08-06 07:30:00 · 130 阅读 · 0 评论 -
使用 nn.Transformer 和 TorchText 进行序列到序列建模
在本教程中,我们训练了一个模型来进行语言建模任务。语言建模任务是指:已有一句话,预测其后续出现某个词或某句话的概率。这句话(一串符号)经过嵌入(embedding)层之后,再使用一个位置编码(positional encoding)层来学习其中的词顺序(详见下一段)。由多层组成。除了输入序列之外,还需要一个正方形的注意力掩码矩阵。因为是用已经出现的词预测后面的词,训练过程中模型不能看到后面已经出现的词,需要用mask矩阵掩盖掉。为了获得每个单词的预测概率,后面会接上一个Linear层和softmax层。原创 2023-08-02 09:30:00 · 144 阅读 · 0 评论 -
使用 TorchText 进行语言翻译
nn.Module。原创 2023-08-01 21:09:00 · 427 阅读 · 0 评论 -
使用 TorchText 进行文本分类
该模型由层和线性层组成(请参见下图)。计算嵌入“袋”的平均值。此处的文本条目具有不同的长度。此处不需要填充,因为文本长度以偏移量保存。另外,由于会动态累积嵌入中的平均值,因此可以提高性能和存储效率,以处理张量序列。建议 PyTorch 用户使用,它可以轻松地并行加载数据(教程为,此处为我们在此处使用DataLoader加载 AG_NEWS 数据集并将其发送到模型以进行训练/验证。原创 2023-07-31 07:15:00 · 117 阅读 · 0 评论 -
NLP From Scratch: 基于注意力机制的 seq2seq 神经网络翻译
torchtext原创 2023-07-30 07:15:00 · 117 阅读 · 0 评论 -
NLP From Scratch: 生成名称与字符级RNN
第一个教程< / intermediate / char_rnn_classification_tutorial >原创 2023-07-29 08:03:32 · 644 阅读 · 0 评论 -
转移学习的计算机视觉教程
引用这些注释,实际上,很少有人从头开始训练整个卷积网络(使用随机初始化),因为拥有足够大小的数据集相对很少。相反,通常在非常大的数据集上对 ConvNet 进行预训练(例如 ImageNet,其中包含 120 万个具有 1000 个类别的图像),然后将 ConvNet 用作初始化或固定特征提取器以完成感兴趣的任务。原创 2023-07-22 13:38:08 · 336 阅读 · 0 评论 -
TorchVision 对象检测微调教程
用于训练对象检测,实例细分和人员关键点检测的参考脚本可轻松支持添加新的自定义数据集。数据集应继承自标准类,并实现__len__和。我们唯一需要的特异性是数据集图像:大小为(H, W)的 PIL 图像目标:包含以下字段的字典格式的N个边界框的坐标,范围从0至W,从0至H:每个边界框的标签。0经常表示背景类:图像标识符。它在数据集中的所有图像之间应该是唯一的,并在评估过程中使用:边界框的区域。在使用 COCO 度量进行评估时,可使用此值来区分小盒子,中盒子和大盒子之间的度量得分。原创 2023-07-22 06:15:00 · 53 阅读 · 0 评论 -
使用 TensorBoard 可视化模型,数据和训练
在中,我们向您展示了如何加载数据,如何向定义为nn.Module子类的模型提供数据,如何在训练数据上训练该模型,以及在测试数据上对其进行测试。为了了解发生的情况,我们在模型训练期间打印一些统计信息,以了解训练是否在进行中。但是,我们可以做得更好:PyTorch 与 TensorBoard 集成,该工具旨在可视化神经网络训练运行的结果。本教程使用说明了其某些功能,可以使用将其读取到 PyTorch 中。我们将从我们将在之前定义相同的optimizer和criterion。原创 2023-07-21 10:30:00 · 72 阅读 · 0 评论 -
可选: 数据并行处理
自动的划分数据,并将作业顺序发送到多个GPU上的多个模型。会在每个模型完成作业后,收集与合并结果然后返回给你。更多信息,请参考: https://pytorch.org/tutorials/beginner/former_torchies/parallelism_tutorial.html。原创 2023-07-19 07:45:00 · 92 阅读 · 0 评论 -
使用torch.nn包来构建神经网络
import torch import torch . nn as nn import torch . nn . functional as F class Net(nn . Module) : def __init__(self) : super(Net , self) . __init__() # 输入图像channel:1;输出channel:6;原创 2023-07-17 07:45:00 · 242 阅读 · 0 评论 -
Autograd:自动求导
PyTorch中,所有神经网络的核心是autograd包。先简单介绍一下这个包,然后训练我们的第一个的神经网络。autograd包为张量上的所有操作提供了自动求导机制。它是一个在运行时定义(define-by-run)的框架,这意味着反向传播是根据代码如何运行来决定的,并且每次迭代可以是不同的.让我们用一些简单的例子来看看吧。原创 2023-07-16 08:29:24 · 148 阅读 · 0 评论 -
什么是PyTorch?
或者根据已有的tensor建立新的tensor。Torch张量和NumPy数组将共享它们的底层内存位置,因此当一个改变时,另外也会改变。CPU上的所有张量(CharTensor除外)都支持与Numpy的相互转换。将一个Torch张量转换为一个NumPy数组是轻而易举的事情,反之亦然。超过100种tensor的运算操作,包括转置,索引,切片,数学运算,一种运算有多种语法。在下面的示例中,我们将研究加法运算。任何一个in-place改变张量的操作后面都固定一个。如果是仅包含一个元素的tensor,可以使用。原创 2023-07-15 17:11:52 · 526 阅读 · 0 评论 -
将分布式`DataParallel`与分布式 RPC 框架相结合
现在,让我们详细介绍每个部分。我们创建 4 个过程,使等级 0 和 1 是我们的训练器,等级 2 是主控制器,等级 3 是参数服务器。,该函数基本上遍历了嵌入表的所有参数并返回 RRef 的列表。训练器通过 RPC 在参数服务器上调用此方法,以接收所需参数的 RRef 列表。始终将需要优化的参数的 RRef 列表,因此我们甚至需要为 FC 层的本地参数创建 RRef。为了从参数服务器中检索嵌入表的参数,我们定义了一个简单的辅助函数。参数服务器只是初始化 RPC 框架,并等待来自训练者和主服务器的 RPC。原创 2023-07-09 07:15:00 · 98 阅读 · 0 评论 -
使用异步执行实现批量 RPC 处理
本教程演示了如何使用@rpc.functions.async_execution装饰器来构建批量 RPC 应用,该装饰器通过减少阻止的 RPC 线程数和合并被调用方上的 CUDA 操作来帮助加快训练速度。这使用 TorchServer 的相同想法进行。注意本教程需要 PyTorch v1.6.0 或更高版本。原创 2023-07-09 06:30:00 · 264 阅读 · 0 评论 -
使用 RPC 的分布式管道并行化
定义模型后,让我们实现训练循环。我们使用专门的“主”工作器来准备随机输入和标签,并控制分布式反向传递和分布式优化器步骤。它首先创建模块的实例。它指定每个批量的微批数量,并提供两个 RPC 工作程序的名称(即worker1和worker2然后,它定义损失函数,并使用帮助器创建以获取参数RRefs的列表。然后,主训练循环与常规本地训练非常相似,除了它使用向后启动并为反向和优化器step()提供context_id之外。原创 2023-07-14 06:00:00 · 329 阅读 · 0 评论 -
使用分布式 RPC 框架实现参数服务器
本教程介绍了分布式 RPC 框架的用法,该方法可用于将模型拆分到多台计算机上,或用于实现参数服务器训练策略,在该策略中,网络训练器可以获取托管在另一台计算机上的参数。完全定义好训练器之后,现在该编写我们的神经网络训练循环,该循环将创建我们的网络和优化器,通过网络运行一些输入并计算损失。请注意,这需要记录在模型的正向传播中调用的 RPC,以便可以构造一个适当的图,其中包括在后向传递中所有参与的分布式工作器。现在,我们已经完成了特定于训练器和参数服务器的代码,剩下的就是添加代码以启动训练器和参数服务器。原创 2023-07-13 09:00:00 · 128 阅读 · 0 评论 -
分布式 RPC 框架入门
本教程使用两个简单的示例来演示如何使用torch.distributed.rpc包构建分布式训练,该包首先在 PyTorch v1.4 中作为原型功能引入。这两个示例的源代码可以在中找到。先前的教程和编写分布式应用,描述了DistributedDataParallel,该模型支持特定的训练范例,该模型可在多个进程之间复制,每个进程都处理输入数据的拆分。有时,您可能会遇到需要不同训练范例的场景。包可以帮助解决上述情况。在情况 1 中,和。原创 2023-07-12 06:15:00 · 115 阅读 · 0 评论 -
用 PyTorch 编写分布式应用
在这个简短的教程中,我们将介绍 PyTorch 的分布式包。我们将了解如何设置分布式设置,如何使用不同的交流策略以及如何查看包的一些内部内容。原创 2023-07-11 11:15:00 · 184 阅读 · 0 评论 -
分布式数据并行入门
(DDP)在模块级别实现可在多台计算机上运行的数据并行性。使用 DDP 的应用应产生多个进程,并为每个进程创建一个 DDP 实例。DDP 在torch.distributed包中使用集体通信来同步梯度和缓冲区。更具体地说,DDP 为给定的每个参数注册一个 Autograd 挂钩,当在后向传递中计算相应的梯度时,挂钩将触发。然后,DDP 使用该信号触发跨进程的梯度同步。有关更多详细信息,请参考。推荐的使用 DDP 的方法是为每个模型副本生成一个进程,其中一个模型副本可以跨越多个设备。原创 2023-07-10 10:00:00 · 97 阅读 · 0 评论 -
单机模型并行最佳实践
模型并行在分布式训练技术中被广泛使用。先前的帖子已经解释了如何使用DataParallel在多个 GPU 上训练神经网络;此功能将相同的模型复制到所有 GPU,其中每个 GPU 消耗输入数据的不同分区。尽管它可以极大地加快训练过程,但不适用于模型太大而无法容纳单个 GPU 的某些用例。这篇文章展示了如何通过使用解决该问题,与相比,该模型将单个模型拆分到不同的 GPU 上,而不是在每个 GPU 上复制整个模型(具体来说, 假设模型m包含 10 层:使用。原创 2023-07-08 22:41:27 · 166 阅读 · 0 评论 -
计算机视觉的量化迁移学习教程(beta)
在本节中,您将使用“冻结”量化特征提取器,并在其顶部训练自定义分类器头。与浮点模型不同,您无需为量化模型设置,因为它没有可训练的参数。请参阅文档了解更多详细信息。加载预训练的模型:在本练习中,您将使用ResNet-18。此时,您需要修改预训练模型。该模型在开始和结束时都有量化/去量化块。但是,由于只使用特征提取器,因此反量化层必须在线性层(头部)之前移动。最简单的方法是将模型包装在模块中。第一步是在 ResNet 模型中隔离特征提取器。尽管在本示例中,您被责成使用fc。原创 2023-07-07 07:15:00 · 136 阅读 · 0 评论 -
PyTorch 中使用 Eager 模式的静态量化(beta)
作为最后的主要设置步骤,我们为训练和测试集定义了数据加载器。在本教程中,我们展示了两种量化方法-训练后静态量化和量化感知训练-描述它们在“幕后”进行的操作以及如何在 PyTorch 中使用它们。原创 2023-07-06 07:15:00 · 747 阅读 · 0 评论 -
BERT 上的动态量化(Beta)
我们重用了中的分词和评估函数。在本教程中,我们演示了如何演示如何将 BERT 等著名的最新 NLP 模型转换为动态量化模型。动态量化可以减小模型的大小,而对准确率的影响有限。原创 2023-07-05 04:15:00 · 263 阅读 · 0 评论 -
LSTM 单词语言模型上的动态量化(beta)
在这里,我们根据词语言模型示例中的模型定义 LSTM 模型架构。动态量化可能是减小模型大小的简单方法,而对精度的影响有限。原创 2023-07-04 07:30:00 · 131 阅读 · 1 评论 -
如何使用torch.nn.utils.prune稀疏神经网络,以及如何扩展它以实现自己的自定义剪裁技术
要实现自己的剪裁函数,可以通过继承基类的子类来扩展模块,这与所有其他剪裁方法一样。__call__apply_maskapplyprune和remove。除了一些特殊情况外,您无需为新的剪裁技术重新实现这些方法。但是,您将必须实现__init__(构造器)和(有关如何根据剪裁技术的逻辑为给定张量计算掩码的说明)。另外,您将必须指定此技术实现的剪裁类型(支持的选项为globalstructured和需要确定在迭代应用剪裁的情况下如何组合蒙版。原创 2023-07-03 09:00:00 · 836 阅读 · 0 评论 -
使用 Ray Tune 的超参数调整
超参数调整可以使平均模型与高精度模型有所不同。 通常,选择不同的学习率或更改网络层大小等简单的事情可能会对模型表现产生巨大影响。幸运的是,有一些工具可以帮助您找到最佳的参数组合。 Ray Tune 是用于分布式超参数调整的行业标准工具。 Ray Tune 包含最新的超参数搜索算法,与 TensorBoard 和其他分析库集成,并通过 Ray 的分布式机器学习引擎本地支持分布式训练。在本教程中,我们将向您展示如何将 Ray Tune 集成到 PyTorch 训练工作流程中。 我们将扩展 PyTorch 文档的原创 2023-07-02 09:30:00 · 472 阅读 · 0 评论 -
分析您的 PyTorch 模块
调度器背后的一般原理是将一个运算符的实现分为多个内核,每个内核都为特定的调度键实现功能;例如,CPU,CUDA 或 Autograd。调度器在您调用运算符时确定最高优先级的调度键是什么(这通过查看张量参数和某些线程本地状态来完成),并将控制权传递给内核以使用该调度键。最终结果是,当您调用运算符时,我们首先执行 Autograd 内核,然后根据传入的张量的设备类型将其重新分配到 CPU 或 CUDA 内核。让我们看一下实现这一目标所涉及的各个部分。首先,我们必须为所讨论的运算符定义架构。与简单的。原创 2023-07-01 10:46:54 · 779 阅读 · 0 评论 -
在 C++ 中注册调度运算符
调度器背后的一般原理是将一个运算符的实现分为多个内核,每个内核都为特定的调度键实现功能;例如,CPU,CUDA 或 Autograd。调度器在您调用运算符时确定最高优先级的调度键是什么(这通过查看张量参数和某些线程本地状态来完成),并将控制权传递给内核以使用该调度键。最终结果是,当您调用运算符时,我们首先执行 Autograd 内核,然后根据传入的张量的设备类型将其重新分配到 CPU 或 CUDA 内核。让我们看一下实现这一目标所涉及的各个部分。首先,我们必须为所讨论的运算符定义架构。与简单的。原创 2023-06-30 08:00:00 · 42 阅读 · 0 评论 -
C++ 前端中的 Autograd
(改编自本教程向添加新的基本操作需要为每个操作实现一个新的子类。用于计算结果和梯度,并对操作历史进行编码。forward和backward,有关详细要求,请参见此链接。在下面,您可以从torch::nn找到Linearpublic :} return {} };然后,我们可以通过以下方式使用4 , 3 } ]public :} };然后,我们可以通过以下方式使用2 } ]有关的更多信息,请参见其文档。原创 2023-06-29 08:00:00 · 82 阅读 · 0 评论 -
TorchScript 中的动态并行性
在本教程中,我们学习了fork()和wait(),这是在 TorchScript 中执行动态,互操作并行的基本 API。我们看到了一些典型的使用模式,这些模式使用这些函数并行执行 TorchScript 代码中的函数,方法或Modules的执行。最后,我们通过一个使用该技术优化模型的示例进行了研究,并探索了 PyTorch 中可用的性能测量和可视化工具。原创 2023-06-28 08:00:00 · 110 阅读 · 0 评论 -
使用自定义 C++ 类扩展 TorchScript
我们还可以在使用 libtorch 的 C++ 进程中使用自定义注册的 C++ 类。举例来说,让我们定义一个简单的nn.Module,它实例化并调用我们文件系统中的foo.pt现在包含我们刚刚定义的序列化 TorchScript 程序。现在,我们将定义一个新的 CMake 项目,以展示如何加载此模型及其所需的.so文件。有关如何执行此操作的完整说明,请查看在 C++ 中加载 TorchScript 模型的教程。foo . ptbuild /请注意,我们已经复制了序列化的foo.pt文件以及上面。原创 2023-06-27 08:00:00 · 236 阅读 · 0 评论 -
使用自定义 C++ 运算符扩展 TorchScript
在本教程中,我们将公开warpPerspective函数,该函数将透视转换应用于图像,从 OpenCV 到 TorchScript 作为自定义运算符。第一步是用 C++ 编写自定义运算符的实现。让我们将此实现的文件称为op.cpp8 , 8 });8 , 8 });该运算符的代码很短。在文件顶部,我们包含 OpenCV 标头文件和标头,该标头暴露了 PyTorch C++ API 中所有需要编写自定义 TorchScript 运算符的必要特性。我们的函数有两个参数:输入image。原创 2023-06-26 08:15:00 · 399 阅读 · 0 评论 -
自定义 C++ 和 CUDA 扩展
现在,您应该对 PyTorch 的 C++ 扩展机制有了一个很好的了解,并有使用它们的动机。pybind11。原创 2023-06-25 08:00:00 · 490 阅读 · 0 评论