PyTorch Python API详解大全(持续更新ing...)(下)

简介: PyTorch Python API详解大全(持续更新ing...)(下)

6. Tensor Views


7. torch.autograd


自动求导包。可以对任何以标量为值的函数进行求导(神经网络也可以,某个矩阵也可以)


7.1 Functional higher level API


7.2 Locally disabling gradient computation


7.3 Default gradient layouts


7.4 In-place operations on Tensors


7.5 Variable (deprecated)


7.6 Tensor autograd functions


CLASS torch.Tensor


  1. backward(gradient=None, retain_graph=None, create_graph=False, inputs=None)

计算当前Tensor相对于图上叶节点的梯度。

对图的微分使用了链式法则。

如果当前Tensor不是一个标量且需要梯度,就需要指定参数gradient。这个gradient是和当前Tensor形状相同,且包含当前Tensor的梯度


 2.detach()

返回一个从当前图中分离下来的Tensor

用于切断反向传播6


7.7 Function

CLASS torch.autograd.Function(*args, **kwargs)

自定义autograd.Function需要subclass autograd.Function,应用forward()和backward()(调用ctx()),调用apply()(不能直接调用forward())


具体的没太看懂,以后研究研究来补充。


示例代码:

class Exp(Function):
    @staticmethod
    def forward(ctx, i):
        result = i.exp()
        ctx.save_for_backward(result)
        return result
    @staticmethod
    def backward(ctx, grad_output):
        result, = ctx.saved_tensors
        return grad_output * result
# Use it by calling the apply method:
output = Exp.apply(input)


7.8 Context method mixins


7.9 Numerical gradient checking


7.10 Profiler


7.11 Anomaly detection

CLASS torch.autograd.detect_anomaly

开启autograd引擎anomaly detection功能的上下文管理器。


功能:


  • 运行前向传播时,如开启检测,在运行反向传播时,可以打印前向传播时导致反向传播崩溃的traceback。
  • 生成NaN值的反向传播计算操作会raise error。


注意:这一操作仅应在debug阶段开启,因为不同的测试会导致程序运行变慢。


示例代码,不用detect_anomaly:

import torch
from torch import autograd
class MyFunc(autograd.Function):
    @staticmethod
    def forward(ctx, inp):
        return inp.clone()
    @staticmethod
    def backward(ctx, gO):
        # Error during the backward pass
        raise RuntimeError("Some error in backward")
        return gO.clone()
def run_fn(a):
    out = MyFunc.apply(a)
    return out.sum()
inp = torch.rand(10, 10, requires_grad=True)
out = run_fn(inp)
out.backward()


输出:

Traceback (most recent call last):
  File "randomly_try2.py", line 17, in <module>
    out.backward()
  File "virtual_env/lib/python3.8/site-packages/torch/_tensor.py", line 363, in backward
    torch.autograd.backward(self, gradient, retain_graph, create_graph, inputs=inputs)
  File "virtual_env/lib/python3.8/site-packages/torch/autograd/__init__.py", line 173, in backward
    Variable._execution_engine.run_backward(  # Calls into the C++ engine to run the backward pass
  File "virtual_env/lib/python3.8/site-packages/torch/autograd/function.py", line 253, in apply
    return user_fn(self, *args)
  File "randomly_try2.py", line 10, in backward
    raise RuntimeError("Some error in backward")
RuntimeError: Some error in backward


可以看到仅输出在backward()中有错。


示例代码,使用detect_anomaly:

import torch
from torch import autograd
class MyFunc(autograd.Function):
    @staticmethod
    def forward(ctx, inp):
        return inp.clone()
    @staticmethod
    def backward(ctx, gO):
        # Error during the backward pass
        raise RuntimeError("Some error in backward")
        return gO.clone()
def run_fn(a):
    out = MyFunc.apply(a)
    return out.sum()
with autograd.detect_anomaly():
    inp = torch.rand(10, 10, requires_grad=True)
    out = run_fn(inp)
    out.backward()


输出:

randomly_try2.py:15: UserWarning: Anomaly Detection has been enabled. This mode will increase the runtime and should only be enabled for debugging.
  with autograd.detect_anomaly():
virtual_env/lib/python3.8/site-packages/torch/autograd/__init__.py:173: UserWarning: Error detected in MyFuncBackward. Traceback of forward call that caused the error:
  File "randomly_try2.py", line 17, in <module>
    out = run_fn(inp)
  File "randomly_try2.py", line 13, in run_fn
    out = MyFunc.apply(a)
 (Triggered internally at  /opt/conda/conda-bld/pytorch_1646755853042/work/torch/csrc/autograd/python_anomaly_mode.cpp:104.)
  Variable._execution_engine.run_backward(  # Calls into the C++ engine to run the backward pass
Traceback (most recent call last):
  File "randomly_try2.py", line 18, in <module>
    out.backward()
  File "virtual_env/lib/python3.8/site-packages/torch/_tensor.py", line 363, in backward
    torch.autograd.backward(self, gradient, retain_graph, create_graph, inputs=inputs)
  File "virtual_env/lib/python3.8/site-packages/torch/autograd/__init__.py", line 173, in backward
    Variable._execution_engine.run_backward(  # Calls into the C++ engine to run the backward pass
  File "virtual_env/lib/python3.8/site-packages/torch/autograd/function.py", line 253, in apply
    return user_fn(self, *args)
  File "randomly_try2.py", line 10, in backward
    raise RuntimeError("Some error in backward")
RuntimeError: Some error in backward


可以看到能追溯到apply()函数。


  1. CLASS torch.autograd.set_detect_anomaly(mode)

设置autograd引擎anomaly detection是否开关的上下文管理器。

mode=True时开。可以作为上下文管理器或函数。异常检测功能见detect_anomaly。

参考7,使用如下代码可在NaN出现时报错,定位错误代码:

import torch
# 正向传播时:开启自动求导的异常侦测
torch.autograd.set_detect_anomaly(True)
# 反向传播时:在求导时开启侦测
with torch.autograd.detect_anomaly():
  loss.backward()


7.12 Saved tensors default hooks


8. torch.cuda


  1. 会自动导入
  2. is_available() 查看CUDA能不能用,返回布尔值
  3. current_device() 返回当前被选device的索引


8.1 Random Number Generator

  1. manual_seed(seed)

设置当前GPU的随机种子,如果cuda不可用会自动忽略。

 2.manual_seed_all(seed)

设置所有GPU的随机种子,如果cuda不可用会自动忽略。


9. torch.cuda.amp


10. torch.backends


10.1 torch.backends.cuda


10.2 torch.backends.cudnn

  1. torch.backends.cudnn.deterministic

布尔值,if True, causes cuDNN to only use deterministic convolution algorithms.


11. torch.distributed


12. torch.distributions


13. torch.fft


14. torch.futures


15. torch.fx


16. torch.hub


17. torch.jit


18. torch.linalg


19. torch.overrides


20. torch.profiler


21. torch.nn.init


这一部分的主要功能是初始化神经网络的参数。

绝大多数torch.nn中的网络层都是自带reset_parameters()函数,会自动初始化参数。


在这个问题:python 3.x - Reset parameters of a neural network in pytorch - Stack Overflow中给出了一种重置网络参数的示例代码:

for layer in model.children():
   if hasattr(layer, 'reset_parameters'):
       layer.reset_parameters()


关于神经网络参数的初始化,更多简单的细节可以参考这些博文:

【pytorch参数初始化】 pytorch默认参数初始化以及自定义参数初始化_华仔的博客-CSDN博客_pytorch参数初始化

【Pytorch】各网络层的默认初始化方法_guofei_fly的博客-CSDN博客_pytorch 默认初始化

【Pytorch】模型权重的初始化函数_guofei_fly的博客-CSDN博客_pytorch模型权重初始化

pytorch系列 – 9 pytorch nn.init 中实现的初始化函数 uniform, normal, const, Xavier, He initialization_墨氲的博客-CSDN博客_nn.init.normal_


  1. calculate_gain(nonlinearity, param=None):返回指定非线性函数的推荐gain value。

示例代码:

>>> gain = nn.init.calculate_gain('leaky_relu', 0.2)  # leaky_relu with negative_slope=0.2


输出值:1.3867504905630728


2.xavier_uniform_(tensor, gain=1.0):又名Glorot initialization

image.png

示例代码:

w = torch.empty(3, 5)
nn.init.xavier_uniform_(w, gain=nn.init.calculate_gain('relu'))


22. torch.onnx


22. torch.optim


22.1 How to use an optimizer

示例代码:

optimizer = optim.SGD(model.parameters(), lr=0.01, momentum=0.9)
optimizer = optim.Adam([var1, var2], lr=0.0001)


22.2 Algorithms

  1. class torch.optim.Optimizer(params, defaults)

优化器基类

  • zero_grad(set_to_none=False)

设置所有被放进优化器的参数Tensor的梯度为0


2.class torch.optim.SGD(params, lr=, momentum=0, dampening=0, weight_decay=0, nesterov=False)

随机梯度下降


23. Complex Numbers


24. DDP Communication Hooks


25. Pipeline Parallelism


26. Quantization


27. Distributed RPC Framework


28. torch.random


29. torch.sparse


30. torch.Storage


31. torch.utils.benchmark


32. torch.utils.bottleneck


33. torch.utils.checkpoint


34. torch.utils.cpp_extension


35. torch.utils.data


  1. class Dataset

表示数据集的抽象类。

需要复写__getitem__()(通过key获得一个观测),可以复写__len__()


  1. class DataLoader

用于以mini-batch范式调用数据集


入参:

  • dataset
  • batch_size
  • shuffle:置True的话,每次调用都打乱顺序
  • collate_fn:对每个batch运行的函数
  • pin_memory:默认置False
  • drop_last:如果置True且最后一个batch不满batch_size,将直接舍弃最后一个batch。默认置False


相关文章
|
18小时前
|
数据采集 JSON API
如何利用Python爬虫淘宝商品详情高级版(item_get_pro)API接口及返回值解析说明
本文介绍了如何利用Python爬虫技术调用淘宝商品详情高级版API接口(item_get_pro),获取商品的详细信息,包括标题、价格、销量等。文章涵盖了环境准备、API权限申请、请求构建和返回值解析等内容,强调了数据获取的合规性和安全性。
|
28天前
|
API 开发者 Python
如何用Python调用孔夫子API?
要使用Python调用孔夫子旧书网API,需先在开发者平台注册并获取API密钥与调用密钥。示例代码展示了如何利用requests库发送请求,获取并解析搜索结果。使用时需替换密钥,并按API文档调整URL和参数。注意遵守API使用规则及法律法规。
如何用Python调用孔夫子API?
|
8天前
|
存储 API 数据库
使用Python开发获取商品销量详情API接口
本文介绍了使用Python开发获取商品销量详情的API接口方法,涵盖API接口概述、技术选型(Flask与FastAPI)、环境准备、API接口创建及调用淘宝开放平台API等内容。通过示例代码,详细说明了如何构建和调用API,以及开发过程中需要注意的事项,如数据库连接、API权限、错误处理、安全性和性能优化等。
45 5
|
14天前
|
API Python
【Azure Developer】分享一段Python代码调用Graph API创建用户的示例
分享一段Python代码调用Graph API创建用户的示例
38 11
|
16天前
|
JSON 安全 API
Python调用API接口的方法
Python调用API接口的方法
74 5
|
1月前
|
JSON 安全 API
如何使用Python开发API接口?
在现代软件开发中,API(应用程序编程接口)用于不同软件组件之间的通信和数据交换,实现系统互操作性。Python因其简单易用和强大功能,成为开发API的热门选择。本文详细介绍了Python开发API的基础知识、优势、实现方式(如Flask和Django框架)、实战示例及注意事项,帮助读者掌握高效、安全的API开发技巧。
123 3
如何使用Python开发API接口?
|
15天前
|
API Python
利用python淘宝/天猫获得淘宝app商品详情原数据 API
要使用Python获取淘宝/天猫商品详情原数据,需先注册开放平台账号并实名认证,创建应用获取API权限。随后,根据API文档构建请求URL和参数,使用requests库发送请求,处理返回的商品详情数据。注意遵守平台使用规则。
|
18天前
|
供应链 API 开发者
探索Python与1688商品详情API接口的协同效应
在数字化时代,1688作为中国领先的B2B平台,其商品详情API接口为市场分析、库存管理和销售策略提供了重要数据支持。本文介绍如何使用Python调用该API,包括前期准备、技术实现、数据解析及错误处理等内容,助力企业和开发者挖掘数据价值,提升商业智能水平。
|
24天前
|
JSON 前端开发 API
使用Python和Flask构建简易Web API
使用Python和Flask构建简易Web API
|
24天前
|
存储 API 数据库
使用Python和Flask构建简单的RESTful API
使用Python和Flask构建简单的RESTful API