我有两个函数可以产生相同的结果:f1(x,theta)=f2(x,theta)
。
给定输入x
,我需要找到尽可能保持这种相等性的参数theta
。
最初我考虑使用平方损失并最小化(f1(x,theta)-f2(x,theta))^2
并通过SGD解决。
然而,我正在考虑使损失更精确,并使用差异的huber(或绝对损失)。 胡贝尔损失是一个分段函数(即最初是二次函数,然后它变为线性函数)。
如何在theano中采用我的内衣失去的渐变?
答案 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