计算图与动态图机制

2024-01-02 08:28
文章标签 计算 机制 动态图

本文主要是介绍计算图与动态图机制,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、计算图

计算图是用来描述运算的有向无环图

计算图有两个主要元素:结点(Node)和边(Edge)

  • 结点表示数据,如向量,矩阵,张量
  • 边表示运算,如加减乘除卷积等

用计算图表示:

  • y = (x+ w) * (w+1)
  • a = x + w
  • b = w + 1
  • y = a * b

在这里插入图片描述

y = (x + w) * (w + 1)
a = x + w
b = w + 1
y = a * b
∂y/∂w = (∂y/∂a) * (∂a/∂w) + (∂y/∂b) * (∂b/∂w)= b * 1 + a * 1= b + a= (w + 1) + (x + w)= 2w + x + 1= 2 * 1 + 2 + 1= 5

在这里插入图片描述

计算图与梯度求导 y = (x+ w) * (w+1)

叶子结点:用户创建的结点称为叶子结点,如X 与 W

is_leaf: 指示张量是否为叶子结点

在这里插入图片描述
grad_fn: 记录创建该张量时所用的方法(函数)
y.grad_fn =
a.grad_fn =
b.grad_fn =

在这里插入图片描述
在这里插入图片描述

动态图

动态图vs 静态图

在这里插入图片描述

动态图 PyTorch

在这里插入图片描述

静态图 TensorFlow

在这里插入图片描述

在这里插入图片描述

import torch
w = torch.tensor([1.], requires_grad=True)  # 创建张量w,并设置requires_grad=True以计算梯度
x = torch.tensor([2.], requires_grad=True)  # 创建张量x,并设置requires_grad=True以计算梯度a = torch.add(w, x)     # 执行加法操作,计算w + x,得到张量a
b = torch.add(w, 1)     # 执行加法操作,计算w + 1,得到张量b
y = torch.mul(a, b)     # 执行乘法操作,计算a * b,得到张量yy.backward()            # 自动计算y对所有需要梯度的叶子结点的梯度
print(w.grad)           # 打印w的梯度# 查看叶子结点
# print("is_leaf:\n", w.is_leaf, x.is_leaf, a.is_leaf, b.is_leaf, y.is_leaf)# 查看梯度
# print("gradient:\n", w.grad, x.grad, a.grad, b.grad, y.grad)# 查看 grad_fn
print("grad_fn:\n", w.grad_fn, x.grad_fn, a.grad_fn, b.grad_fn, y.grad_fn)

在这段代码中,我们定义了两个张量wx,并且将它们设置为需要计算梯度(requires_grad=True)。然后我们定义了计算图中的各个操作:加法a = w + x,加法b = w + 1,乘法y = a * b
接下来,我们调用y.backward()来自动计算y对于所有需要梯度的叶子结点的梯度。在这个例子中,叶子结点是wx。然后,我们打印出w的梯度w.grad
运行这段代码,我们得到的输出是tensor([5.]),即w的梯度为5。

这篇关于计算图与动态图机制的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/561886

相关文章

Python实现精确小数计算的完全指南

《Python实现精确小数计算的完全指南》在金融计算、科学实验和工程领域,浮点数精度问题一直是开发者面临的重大挑战,本文将深入解析Python精确小数计算技术体系,感兴趣的小伙伴可以了解一下... 目录引言:小数精度问题的核心挑战一、浮点数精度问题分析1.1 浮点数精度陷阱1.2 浮点数误差来源二、基础解决

基于Redis自动过期的流处理暂停机制

《基于Redis自动过期的流处理暂停机制》基于Redis自动过期的流处理暂停机制是一种高效、可靠且易于实现的解决方案,防止延时过大的数据影响实时处理自动恢复处理,以避免积压的数据影响实时性,下面就来详... 目录核心思路代码实现1. 初始化Redis连接和键前缀2. 接收数据时检查暂停状态3. 检测到延时过

Redis中哨兵机制和集群的区别及说明

《Redis中哨兵机制和集群的区别及说明》Redis哨兵通过主从复制实现高可用,适用于中小规模数据;集群采用分布式分片,支持动态扩展,适合大规模数据,哨兵管理简单但扩展性弱,集群性能更强但架构复杂,根... 目录一、架构设计与节点角色1. 哨兵机制(Sentinel)2. 集群(Cluster)二、数据分片

Python文本相似度计算的方法大全

《Python文本相似度计算的方法大全》文本相似度是指两个文本在内容、结构或语义上的相近程度,通常用0到1之间的数值表示,0表示完全不同,1表示完全相同,本文将深入解析多种文本相似度计算方法,帮助您选... 目录前言什么是文本相似度?1. Levenshtein 距离(编辑距离)核心公式实现示例2. Jac

Python中经纬度距离计算的实现方式

《Python中经纬度距离计算的实现方式》文章介绍Python中计算经纬度距离的方法及中国加密坐标系转换工具,主要方法包括geopy(Vincenty/Karney)、Haversine、pyproj... 目录一、基本方法1. 使用geopy库(推荐)2. 手动实现 Haversine 公式3. 使用py

深入理解go中interface机制

《深入理解go中interface机制》本文主要介绍了深入理解go中interface机制,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录前言interface使用类型判断总结前言go的interface是一组method的集合,不

C# async await 异步编程实现机制详解

《C#asyncawait异步编程实现机制详解》async/await是C#5.0引入的语法糖,它基于**状态机(StateMachine)**模式实现,将异步方法转换为编译器生成的状态机类,本... 目录一、async/await 异步编程实现机制1.1 核心概念1.2 编译器转换过程1.3 关键组件解析

Redis客户端连接机制的实现方案

《Redis客户端连接机制的实现方案》本文主要介绍了Redis客户端连接机制的实现方案,包括事件驱动模型、非阻塞I/O处理、连接池应用及配置优化,具有一定的参考价值,感兴趣的可以了解一下... 目录1. Redis连接模型概述2. 连接建立过程详解2.1 连php接初始化流程2.2 关键配置参数3. 最大连

Spring Security 单点登录与自动登录机制的实现原理

《SpringSecurity单点登录与自动登录机制的实现原理》本文探讨SpringSecurity实现单点登录(SSO)与自动登录机制,涵盖JWT跨系统认证、RememberMe持久化Token... 目录一、核心概念解析1.1 单点登录(SSO)1.2 自动登录(Remember Me)二、代码分析三、

Go语言并发之通知退出机制的实现

《Go语言并发之通知退出机制的实现》本文主要介绍了Go语言并发之通知退出机制的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录1、通知退出机制1.1 进程/main函数退出1.2 通过channel退出1.3 通过cont