我一直在尝试在Caffe中实现softmax版本的三元组损失,描述于
霍弗和艾隆,使用三元组网络进行深度度量学习, ICLR 2015.
我已经尝试过这个,但我发现很难计算梯度,因为指数中的 L2 不是平方的。
有人可以帮我吗?
使用现有的 caffe 层实现 L2 规范可以节省您的所有精力。
这是一种计算方法||x1-x2||_2
在咖啡厅中的“底部”x1
and x2
(假设x1
and x2
are B
-by-C
斑点、计算B
规范C
尺寸差异)
layer {
name: "x1-x2"
type: "Eltwise"
bottom: "x1"
bottom: "x1"
top: "x1-x2"
eltwise_param {
operation: SUM
coeff: 1 coeff: -1
}
}
layer {
name: "sqr_norm"
type: "Reduction"
bottom: "x1-x2"
top: "sqr_norm"
reduction_param { operation: SUMSQ axis: 1 }
}
layer {
name: "sqrt"
type: "Power"
bottom: "sqr_norm"
top: "sqrt"
power_param { power: 0.5 }
}
对于论文中定义的三元组损失,您需要计算 L2 范数x-x+
并为x-x-
,连接这两个 blob 并将连接的 blob 提供给"Softmax"
layer.
不需要肮脏的梯度计算。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)