在theano

时间:2016-05-13 17:58:11

标签: statistics theano gradient-descent

我有两个函数可以产生相同的结果:f1(x,theta)=f2(x,theta)

给定输入x,我需要找到尽可能保持这种相等性的参数theta

最初我考虑使用平方损失并最小化(f1(x,theta)-f2(x,theta))^2并通过SGD解决。

然而,我正在考虑使损失更精确,并使用差异的huber(或绝对损失)。 胡贝尔损失是一个分段函数(即最初是二次函数,然后它变为线性函数)。

如何在theano中采用我的内衣失去的渐变?

1 个答案:

答案 0 :(得分:1)

可以找到一个非常简单的theano中的huber损失实现here

以下是代码段

import theano.tensor as T
delta = 0.1
def huber(target, output):
    d = target - output
    a = .5 * d**2
    b = delta * (abs(d) - delta / 2.)
    l = T.switch(abs(d) <= delta, a, b)
    return l.sum()

函数huber将返回损失的符号表示,然后您可以插入theano.tensor.grad以获取渐变并使用它来最小化使用SGD