我一直在努力实现在Caffe中描述的三联体损失的softmax版本 Hoffer and Ailon, Deep Metric Learning Using Triplet Network, ICLR 2015
我试过这个但是我发现很难计算梯度,因为指数中的L2不是平方的。
有人可以帮我吗?
答案 0 :(得分:3)
使用现有的caffe层实现L2规范可以为您节省所有的喧嚣。
以下是计算“底部”function data2html(data) {
...// use .map and .join
}
$("#divid").append(data2html(data))
和||x1-x2||_2
的caffe x1
的一种方法(假设x2
和x1
为x2
-by - B
blob,计算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 }
}
和x-x+
的L2范数,将这两个blob连接起来并将concat blob提供给x-x-
层。
无需进行脏梯度计算。
答案 1 :(得分:1)