logo资料库

pytorch函数API速查表.pdf

第1页 / 共294页
第2页 / 共294页
第3页 / 共294页
第4页 / 共294页
第5页 / 共294页
第6页 / 共294页
第7页 / 共294页
第8页 / 共294页
资料共294页,剩余部分请下载后查看
PyTorch 0.4 中文文档
笔记
自动求导机制
广播语义
CUDA语义
扩展PyTorch
常见问题
多进程最佳实践
序列化语义
Windows 常见问题
包参考
Torch
torch.Tensor
Tensor Attributes
torch.sparse
torch.cuda
torch.Storage
torch.nn
torch.nn.functional
自动差异化包 - torch.autograd
torch.optim
torch.nn.init
torch.distributions
Multiprocessing包 - torch.multiprocessing
分布式通讯包 - torch.distributed
torch.utils.bottleneck
torch.utils.checkpoint
torch.utils.cpp_extension
torch.utils.data
torch.utils.ffi
torch.utils.model_zoo
torch.onnx
遗留包 - torch.legacy
torchvision 参考
torchvision
torchvision.datasets
torchvision.models
torchvision.transform
torchvision.utils
目錄 PyTorch 0.4 中文文档 笔记 自动求导机制 广播语义 CUDA语义 扩展PyTorch 常见问题 多进程最佳实践 序列化语义 Windows 常见问题 包参考 Torch torch.Tensor Tensor Attributes torch.sparse torch.cuda torch.Storage torch.nn torch.nn.functional 自动差异化包 - torch.autograd torch.optim torch.nn.init torch.distributions Multiprocessing包 - torch.multiprocessing 分布式通讯包 - torch.distributed torch.utils.bottleneck torch.utils.checkpoint torch.utils.cpp_extension torch.utils.data torch.utils.ffi torch.utils.model_zoo torch.onnx 遗留包 - torch.legacy torchvision 参考 torchvision 1.1 1.2 1.2.1 1.2.2 1.2.3 1.2.4 1.2.5 1.2.6 1.2.7 1.2.8 1.3 1.3.1 1.3.2 1.3.3 1.3.4 1.3.5 1.3.6 1.3.7 1.3.8 1.3.9 1.3.10 1.3.11 1.3.12 1.3.13 1.3.14 1.3.15 1.3.16 1.3.17 1.3.18 1.3.19 1.3.20 1.3.21 1.3.22 1.4 1.4.1 1
torchvision.datasets torchvision.models torchvision.transform torchvision.utils 1.4.2 1.4.3 1.4.4 1.4.5 2
PyTorch 0.4 中文文档 PyTorch 0.4 中文文档 维护组织: PyTorch 中文网 PyTorch 是一个针对深度学习, 并且使用 GPU 和 CPU 来优化的 tensor library (张 量库) . 在线阅读 PDF格式 EPUB格式 MOBI格式 代码仓库 3
笔记 笔记 4
自动求导机制 自动求导机制 1. 从后向中排除子图 requires_grad volatile 2. 自动求导如何编码历史信息 3. Variable上的In-place操作 4. In-place正确性检查 本说明将概述Autograd如何工作并记录操作。没有必要全部了解,但建议您熟悉 它,他可以将帮助你编写程序更高效,更清洁;同时还可以帮助您进行调试。 向后排除子视图: 每个变量都有一个标记: requires_grad 允许从梯度计算中细分排除子图,并可 以提高效率。 requires_grad 如果一个输入变量定义 requires_grad ,那么他的输出也可以使 用 requires_grad ;相反,只有当所有的输入变量都不定义 requires_grad 梯 度,才不会输出梯度。如果其中所有的变量都不需要计算梯度,在子图中从不执行 向后计算。 >>> x = Variable(torch.randn(5, 5)) >>> y = Variable(torch.randn(5, 5)) >>> z = Variable(torch.randn(5, 5), requires_grad=True) >>> a = x + y >>> a.requires_grad False >>> b = a + z >>> b.requires_grad True 当您想要冻结部分模型时,这个标志特别有用;除非您事先知道不会使用到某些参数 的梯度。 例如,如果您想调整预训练的 CNN ,只要切换冻结模型中的 requires_grad 标 志即可,直到计算到最后一层才会保存中间缓冲区,仿射变换和网络输出都需要使 用梯度的权值。 5
自动求导机制 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=Tru e by default model.fc = nn.Linear(512, 100) # Optimize only the classifier optimizer = optim.SGD(model.fc.parameters(), lr=1e-2, momentum=0 .9) autograd如何编码历史信息: 每个变量都有一个 .creator 属性,它指向把它作为输出的函数。这是一个 由 Function 对象作为节点组成的有向无环图(DAG)的入口点,它们之间的引 用就是图的边。每次执行一个操作时,一个表示它的新 Function 就被实例化,它 的 forward() 方法被调用,并且它输出的 Variable 的创建者被设置为这 个 Function 。然后,通过跟踪从任何变量到叶节点的路径,可以重建创建数据的 操作序列,并自动计算梯度。 需要注意的一点是,整个图在每次迭代时都是从头开始重新创建的,这就允许使用 任意的Python控制流语句,这样可以在每次迭代时改变图的整体形状和大小。在启 动训练之前不必对所有可能的路径进行编码—— what you run is what you differentiate. Variable上的In-place操作: 支持自动归档中的就地操作是一件很困难的事情,我们在大多数情况下都不鼓励使 用它们。Autograd的积极缓冲区释放和重用使其非常高效,并且在现场操作实际上 会降低内存使用量的情况下,极少数场合很少。除非您在内存压力很大的情况下运 行,否则您可能永远不需要使用它们。 限制现场操作适用性的两个主要原因: 1. 覆盖计算梯度所需的值。这就是为什么变量不支持 log_ 。其梯度公式需要原 始输入,而通过计算逆运算可以重新创建它,它在数值上是不稳定的,并且需 要额外的工作,这往往会失败使用这些功能的目的。 2. 每个 in-place 操作实际上需要实现重写计算图。不合适的版本只需分配新对 象,并保留对旧图的引用,而 in-place 操作则需要将所有输入 的 creator 更改为 Function 表示此操作。这就比较棘手,特别是如果有许 多变量引用相同的存储(例如通过索引或转置创建的),并且如果被修改输入 的存储被其他 Variable 引用,则 in-place 函数实际上会抛出错误。 In-place正确性检测: 6
自动求导机制 每个变量都保留一个版本计数器 version counter ,当在任何操作中被使用时, 它都会递增。当函数保存任何用于后向的 tensor 时,还会保存其包含变量的版本 计数器 version counter 。一旦访问, self.saved_tensors 它被会被检查, 如果它大于保存的值,则会引起错误。 译者署名 用户名 头像 职能 签名 Song 翻译 人生总要追求点什么 7
广播语义 广播语义 一般语义 直接语义 向后兼容性 许多 pytorch 操作都支持NumPy广播语义 简而言之,如果 Pytorch 操作支持广播,则其张量参数可以自动扩展为相同大小(不 需要复制数据)。 一般语义 如果 pytorch 张量满足以下条件,那么就可以广播: 每个张量至少有一个维度。 在遍历维度大小时, 从尾部维度开始遍历, 并且二者维度必须相等, 它们其中一 个要么是 1 要么不存在. 例如: >>> x=torch.FloatTensor(5,7,3) >>> y=torch.FloatTensor(5,7,3) # 相同形状的质量可以被广播(上述规则总是成立的) >>> x=torch.FloatTensor() >>> y=torch.FloatTensor(2,2) # x和y不能被广播,因为x没有维度 # can line up trailing dimensions >>> x=torch.FloatTensor(5,3,4,1) >>> y=torch.FloatTensor( 3,1,1) # x和y可以被广播 # 1st trailing dimension: both have size 1 # 2nd trailing dimension: y has size 1 # 3rd trailing dimension: x size == y size # 4th trailing dimension: y dimension doesn't exist # 但是: >>> x=torch.FloatTensor(5,2,4,1) >>> y=torch.FloatTensor( 3,1,1) # x和y不能被广播,因为在`3rd`中 # x and y are not broadcastable, because in the 3rd trailing dim ension 2 != 3 如果 x 和 y 可以被广播,得到的张量大小的计算方法如下: 8
分享到:
收藏