【发布时间】:2016-02-11 00:54:07
【问题描述】:
我发现这很难解释,但我会尽力通过一个例子。
考虑下面分配给变量grad的表达式
from sympy import *
a, x, b = symbols("a x b")
y_pred = a * x
loss = log(1 + exp(- b * y_pred))
grad = diff(loss, x, 1)
grad 有如下表达式:
-a*b*exp(-a*b*x)/(1 + exp(-a*b*x))
现在我想通过两种方式操作grad。
1) 我希望sympy 尝试重写表达式grad,使其中的所有术语都不像
exp(-a*b*x)/(1 + exp(-a*b*x))。
2) 我还希望它尝试重写表达式,使其至少包含一个类似于 1./(1 + exp(a*b*x)) 的术语。
所以最后,grad 变为:
-a*b/(1 + exp(a*b*x)
请注意,1./(1 + exp(a*b*x)) 等同于 exp(-a*b*x)/(1 + exp(-a*b*x)),但我不想明确提及 sympy :)。
我不确定这是否可行,但知道是否可以在某种程度上做到这一点会很有趣。
【问题讨论】: