“计算图”(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