【paddle】详解 padde.autograd.backward

news/2025/2/27 5:27:24

目录

  • backward
  • 二次函数案例
  • paddle 代码
  • pytorch 代码

backward

paddle.autograd.backward(tensors, grad_tensors=None, retain_graph=False)[源代码]

参数

  • tensors (list[Tensor]) – 将要计算梯度的 Tensors 列表。Tensors 中不能包含有相同的 Tensor。
  • grad_tensors (None|list[Tensor|None],可选) – tensors 的初始梯度值。如果非 None,必须和 tensors 有相同的长度,并且如果其中某一 Tensor 元素为 None,则该初始梯度值为填充 1.0 的默认值;如果是 None,所有的 tensors 的初始梯度值为填充 1.0 的默认值。默认值:None。
  • retain_graph (bool,可选) – 如果为 False,反向计算图将被释放。如果在 backward()之后继续添加 OP,需要设置为 True,此时之前的反向计算图会保留也可以视为静态计算图。将其设置为 False 会更加节省内存。默认值:False, 此时相当于动态计算图。

需要注意的是 grad_tensors 默认是 None, 如果给该 参数赋值与自变量相同维数的张量,则会按照该张量中的元素作为梯度的权重,一般在多节点机器学习任务中使用。

如果需要计算高阶微分信息或者反复求梯度,例如 Hessian 矩阵则也需要 retain_graph 为真。

二次函数案例

f ( x ) = x 0 2 + x 1 2 f(x)=x_0^2+x_1^2 f(x)=x02+x12
∇ f ( x ) = [ 2 x 0 2 x 1 ] \nabla f(x)= \left[\begin{matrix} 2x_0\\ 2x_1 \end{matrix}\right] f(x)=[2x02x1]
x = [ 1 , 2 ] ⊤ x=[1,2]^\top x=[1,2] ∇ f ( x ) = [ 2 , 4 ] ⊤ \nabla f(x)=[2,4]^\top f(x)=[2,4]

paddle__27">paddle 代码

import paddle
root = paddle.to_tensor([1.0, 2.0], dtype='float32', stop_gradient=False)
def fobj(x):
    return(paddle.sum(x**2))
y = fobj(root)
paddle.autograd.backward(y,None,True)
print('paddle:',root.grad)
print(2*root)

pytorch 代码

import torch
root = torch.tensor([1.0, 2.0], dtype=torch.float32, requires_grad=True)
def fobj(x):
    return torch.sum(x**2)
y = fobj(root)
y.backward(retain_graph=True)
print('torch:',root.grad)
print(root*2)

http://www.niftyadmin.cn/n/5869509.html

相关文章

8. 【.NET 8 实战--孢子记账--从单体到微服务--转向微服务】--微服务基础工具与技术--Ocelot 网关--负载均衡

负载均衡在Ocelot中作为API网关的核心功能,通过智能调度流量保障微服务架构的高效与稳定。Ocelot内置多种算法动态分配请求,例如轮询策略按顺序分发流量,最小连接数策略优先选择负载较低的实例,而基于Cookie的会话粘滞策略则能维持…

组件动态注册、布局引擎、Schema驱动渲染的可视化搭建系统架构设计之参考方案

组件动态注册、布局引擎、Schema驱动渲染的可视化搭建系统架构设计之参考方案 可视化搭建系统架构设计:如何实现组件动态注册、布局引擎、Schema驱动渲染? 以下为完整的系统架构设计方案,分为核心模块设计、关键技术实现、工程化保障三部分,覆盖动态注册、布局引擎、Sche…

对话式AI引擎:DeepSeek技术引领多模态交互新篇章

摘要 DeepSeek技术公司推出了一项创新服务——“对话式AI引擎”,仅需两行代码即可激活任意大型AI模型的语音对话功能。这项技术使得文本型AI模型迅速转变为具备实时语音对话能力的多模态交互模型,解决了大型AI模型在语音交互方面的不足,为AI行…

Nginx面试宝典【刷题系列】

文章目录 1、nginx是如何实现高并发的?2、Nginx如何处理HTTP请求?3、使用“反向代理服务器”的优点是什么?4、列举Nginx服务器的最佳用途。5、Nginx服务器上的Master和Worker进程分别是什么?6、什么是C10K问题?7、请陈述stub_status和sub_filter指令的…

从同步到异步:Vue 3 的异步更新策略与 `tick` 机制

1. 引言:Vue 3 的异步更新,我们真的了解吗? 在日常开发中,我们都知道 Vue 3 是异步更新的。大多数时候,我们只是简单地使用 ref、reactive、computed 等 API,享受着 Vue 的响应式系统带来的便利。然而&…

【实战 ES】实战 Elasticsearch:快速上手与深度实践-1.1.2典型应用场景:日志分析、实时搜索、推荐系统

👉 点击关注不迷路 👉 点击关注不迷路 👉 点击关注不迷路 文章大纲 为什么选择Elasticsearch?——典型应用场景深度解析1. 引言2. 日志分析:海量数据的实时洞察2.1 行业痛点2.2 ES解决方案关键技术实现: 2.…

Linux中的UDP编程接口基本使用

UDP编程接口基本使用 本篇介绍 在前面网络基础部分已经介绍了网络的基本工作模式,有了这些理论基础之后,下面先从UDP编程开始从操作部分深入网络 在本篇中,主要考虑下面的内容: 创建并封装服务端:了解创建服务端的…

Ubuntu本地使用AnythingLLM

1.介绍 AnythingLLM是一个全栈应用程序,由Mintplex Labs Inc.开发,旨在将任何文档、资源或内容片段转换为大语言模型(LLM)在聊天中可以利用的相关上下文。 2.在ubuntu本地安装 打开终端并运行: curl -fsSL https:/…