Реализация нормы L2 с использованием существующих слоев CAFFE может спасти вас все толкаются.
Вот один из способов вычислить ||x1-x2||_2
в CAFFE для "нижних" с x1
и x2
(при условии, x1
и x2
являются B
C
сгустков матрицы с размерностью, вычислительные B
норм для C
мерных diff)
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-
, объединить эти две капли и подавать конкат-блоб на слой "Softmax"
.
Нет необходимости в вычислениях грязного градиента.
@Naman, если вы собираетесь использовать кофе, лучше переходите через существующие слои: это ваши строительные блоки! чем лучше вы их знаете, тем легче будет ваша жизнь! – Shai
Еще одна вещь, это больше о использовании памяти Caffe. Если мне нужно выполнить нормализацию L2, каково было бы это сделать? Я могу сделать сокращение, за которым следует изменение, за которым следуют слоты eltwise, но будет ли больше голода, чем реализация целого в одном слое? – Naman
Я пытался реализовать это решение, находящее одну проблему. Бумага рода делает евклидовую потерю. Итак, после Softmax, нужно ли выводить результат на Euclidean loss layer? – Naman