PyTorch 1.0 中文文档:自动求导机制

译者:冯宝宝

本说明将概述autograd(自动求导)如何工作并记录每一步操作。了解这些并不是绝对必要的,但我们建议您熟悉它,因为它将帮助你编写更高效,更清晰的程序,并可以帮助您进行调试。

反向排除子图

每个张量都有一个标志:requires_grad,允许从梯度计算中细致地排除子图,并可以提高效率。

requires_grad

只要有单个输入进行梯度计算操作,则其输出也需要梯度计算。相反,只有当所有输入都不需要计算梯度时,输出才不需要梯度计算。如果其中所有的张量都不需要进行梯度计算,后向计算不会在子图中执行。

>>> x = torch.randn(5, 5)  # requires_grad=False by default
>>> y = torch.randn(5, 5)  # requires_grad=False by default
>>> z = torch.randn((5, 5), requires_grad=True)
>>> a = x + y
>>> a.requires_grad
False
>>> b = a + z
>>> b.requires_grad
True

当你想要冻结部分模型或者事先知道不会使用某些参数的梯度时,这些标志非常有用。例如,如果要微调预训练的CNN,只需在冻结的基础中切换requires_grad标志就够了,并且直到计算到达最后一层,才会保存中间缓冲区,,其中仿射变换将使用所需要梯度的权重 ,网络的输出也需要它们。

model = torchvision.models.resnet18(pretrained=True)
for param in model.parameters():
    param.requires_grad = False
# Replace the last fully-connected layer
# Parameters of newly constructed modules have requires_grad=True by default
model.fc = nn.Linear(512, 100)

阅读全文/改进本文

原文地址:https://www.cnblogs.com/wizardforcel/p/10350588.html

时间: 2024-08-24 21:34:26

PyTorch 1.0 中文文档:自动求导机制的相关文章

PyTorch 1.0 中文文档:广播语义

译者:冯宝宝 许许多多的PyTorch操作都支持NumPy Broadcasting Semantics. 简而言之,如果PyTorch操作支持广播,那么它的Tensor参数可以自动扩展为相同的类型大小(不需要复制数据). 一般语义 如果遵守以下规则,则两个张量是"可广播的": 每个张量至少有一个维度: 遍历张量维度大小时,从末尾随开始遍历,两个张量的维度大小必须相等,它们其中一个为1,或者一个不存在. 例如: >>> x=torch.empty(5,7,3) >

PyTorch 1.0 中文文档:torch.onnx

译者:guobaoyo 示例:从Pytorch到Caffe2的端对端AlexNet模型 这里是一个简单的脚本程序,它将一个在 torchvision 中已经定义的预训练 AlexNet 模型导出到 ONNX 格式. 它会运行一次,然后把模型保存至 alexnet.onnx: import torch import torchvision dummy_input = torch.randn(10, 3, 224, 224, device='cuda') model = torchvision.mo

PyTorch 1.0 中文文档:数据类型信息

译者:冯宝宝 可以通过torch.finfo 或 torch.iinfo访问torch.dtype的数字属性. torch.finfo class torch.finfo torch.finfo 是一个用来表示浮点torch.dtype的数字属性的对象(即torch.float32,torch.float64和torch.float16). 这类似于 numpy.finfo. torch.finfo 提供以下属性: 名称 类型 描述 bits 整型 int 数据类型占用的位数 eps 浮点型fl

PyTorch 1.0 中文文档:torch.nn.init

译者:GeneZC torch.nn.init.calculate_gain(nonlinearity, param=None) 返回给定非线性函数的推荐的增益值.对应关系如下表: 非线性函数 增益 Linear / Identity Conv{1,2,3}D Sigmoid Tanh ReLU Leaky Relu 参数: nonlinearity – 非线性函数 (nn.functional 中的名字) param – 对应非线性函数的可选参数 例子 >>> gain = nn.in

PyTorch 1.0 中文文档:torch.nn.functional

译者:hijkzzz 卷积函数 conv1d torch.nn.functional.conv1d(input, weight, bias=None, stride=1, padding=0, dilation=1, groups=1) → Tensor 对由多个输入平面组成的输入信号进行一维卷积. 有关详细信息和输出形状, 请参见Conv1d. 注意 在某些情况下, 当使用CUDA后端与CuDNN时, 该操作符可能会选择不确定性算法来提高性能. 如果这不是您希望的, 您可以通过设置torch.

PyTorch 1.0 中文文档:多进程包 - torch.multiprocessing

译者:hijkzzz torch.multiprocessing 是一个本地 multiprocessing 模块的包装. 它注册了自定义的reducers, 并使用共享内存为不同的进程在同一份数据上提供共享的视图. 一旦 tensor/storage 被移动到共享内存 (见 share_memory_()), 将其发送到任何进程不会造成拷贝开销. 此 API 100% 兼容原生模块 - 所以足以将 import multiprocessing 改成 import torch.multiproc

PyTorch 1.0 中文文档:CUDA 语义

译者:片刻 torch.cuda 用于设置和运行 CUDA 操作.它会跟踪当前选定的GPU,并且默认情况下会在该设备上创建您分配的所有 CUDA tensors.可以使用 torch.cuda.device 上下文管理器更改所选设备. 但是,一旦分配了 tensor,就可以对其进行操作而不管所选择的设备如何,结果将始终与 tensor 放在同一设备上. 默认情况下不允许跨 GPU 操作,除了 copy_() 具有类似复制功能的其他方法,例如 to() 和 cuda().除非您启用点对点内存访问,

PyTorch 1.0 中文文档:torch.sparse

译者:hijkzzz 警告 这个API目前还处于试验阶段,可能在不久的将来会发生变化. Torch支持COO(rdinate )格式的稀疏张量,这可以有效地存储和处理大多数元素为零的张量. 稀疏张量表示为一对稠密张量:一个值张量和一个二维指标张量.一个稀疏张量可以通过提供这两个张量,以及稀疏张量的大小来构造(从这些张量是无法推导出来的!)假设我们要定义一个稀疏张量,它的分量3在(0,2)处,分量4在(1,0)处,分量5在(1,2)处,然后我们可以这样写 >>> i = torch.Lon

PyTorch 1.0 中文文档:torch.cuda

译者:bdqfork 这个包添加了对CUDA张量类型的支持,它实现了与CPU张量同样的功能,但是它使用GPU进计算. 它是懒加载的,所以你可以随时导入它,并使用 is_available() 来决定是否让你的系统支持CUDA. CUDA semantics 有关于使用CUDA更详细的信息. torch.cuda.current_blas_handle() 返回一个cublasHandle_t指针给当前的cuBLAS处理. torch.cuda.current_device() 返回当前选择地设备