使用python层C实现Bhattacharyya丢失函数

2024-05-03 09:21:22 发布

您现在位置:Python中文网/ 问答频道 /正文

尝试使用python层caffe实现我的自定义丢失层。我使用了这个example作为指导,并编写了forward函数,如下所示:

    def forward(self,bottom,top):
        score = 0;
        self.mult[...] = np.multiply(bottom[0].data,bottom[1].data)
        self.multAndsqrt[...] = np.sqrt(self.mult)
        top[0].data[...] = -math.log(np.sum(self.multAndsqrt))

然而,第二个任务,即实现backward函数对我来说有点困难,因为我对python完全不熟悉。所以请帮我编写后面的部分。 下面是要实现的stocashtic梯度的成本函数及其导数:

enter image description here 提前谢谢。在

注意,表中的p[i]表示ith输出神经元值。在


Tags: 函数selfdataexampletopdefnpmultiply
1条回答
网友
1楼 · 发布于 2024-05-03 09:21:22

{{cd2>

在向后函数中,您只需计算Db相对于其输入(p和{})的偏导数,并将它们存储在相应的底部diff blob中:

diff_p = dDb(p,q)/dp

diff_q = dDb(p,q)/dq

所以你的后向函数看起来像:

def backward(self, top, propagate_down, bottom):
    if propagate_down[0]:
        bottom[0].diff[...] = # calculate dDb(p,q)/dp
    if propagate_down[1]:
        bottom[1].diff[...] = # calculate dDb(p,q)/dq

请注意,您通常使用批处理的平均(而不是全部)错误。最后你会得到这样的结果:

^{pr2}$

一旦计算了Db的偏导数,就可以像对前向传递函数所做的那样,将它们插入到上面的模板中。在

相关问题 更多 >