【发布时间】:2017-10-26 12:02:24
【问题描述】:
我想为神经网络编写一些自定义 CUDA 内核以加快计算速度,但如果有可以自动执行的包,我不想花时间手动区分张量表达式。
有没有可以显示符号矩阵微分表达式的python包?
我知道sympy 可以为这样的非矩阵表达式做到这一点:
def func(x):
return 1 / x
arg_symbols = sp.symbols(inspect.getfullargspec(func).args)
sym_func = func(*arg_symbols)
s = ''
for arg in arg_symbols:
s += '{}\n'.format(arg, sp.Lambda(arg_symbols, sym_func.diff(arg)))
# this is what I need:
print(s)
>>> Lambda(x, -1/x**2)
我知道autograd 包可以计算矩阵表达式的导数
函数被求值后,autograd 有一个所有操作的列表 执行了哪些操作以及它们依赖于哪些节点。这是 函数评估的计算图。计算 导数,我们只需将微分规则应用于每个节点 在图中。
但是有没有办法从它或一些类似的包中获得这种微分计算图?
【问题讨论】:
标签: python symbolic-math