L3-023 计算图 (30 分)

计算图是深度学习系统的核心,它通过有向无环图来表示数学表达式,如神经网络。节点代表基本操作或输入,边表示依赖关系。以函数f(x)为例,先进行反向存图,标记有入度节点,然后使用深度优先搜索(DFS)计算结果,并存储中间值。同时,利用DFS计算偏导数,存储于特定数组中。
摘要由CSDN通过智能技术生成

“计算图”(computational graph)是现代深度学习系统的基础执行引擎,提供了一种表示任意数学表达式的方法,例如用有向无环图表示的神经网络。 图中的节点表示基本操作或输入变量,边表示节点之间的中间值的依赖性。
例如,下图就是一个函数 f(x)的计算图。
在这里插入图片描述

先把反向存图,把有入度的标记,没有入度的就是尾节点。
然后从这个点dfs记忆化递归出计算结果存在m[50001]中
再求偏导数,用dm[5001]存,用dfs2(cur,i)代表对第i个x求偏导在cur这个点的导数。

#include <bits/stdc++.h>
#define inf 0x7fffffff
using namespace std;
struct node{
   
	double val;
	int op , u , v;
}m[50001] , dm[50001];
double dfs(int cur){
   		//求函数结果
	if(m[cur].op == 0 || m[cur].val != inf){
   
		return m[cur].val;
	}
	else if(m[cur].op == 1){
   
		return m[cur].val = dfs(m[cur].u)+dfs(m[cur].v);
	}
	else if(m[cur].op == 2){
   
		return m[cur].val = dfs(m[cur].u)-dfs(m[cur].v);
	}
	else if(m[cur].op == 3){
   
		re
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值