Capa de pérdida euclidiana en Caffe
Actualmente estoy tratando de implementar mi propia capa de pérdida en caffe, y mientras intento hacerlo, estoy usando otras capas como referencia. Sin embargo, una cosa que me desconcierta es el uso detop[0]->cpu_diff()
enBackward_cpu
. Usaré elEuclideanLossLayer
como una referencia. Aquí están mis preguntas.
Tengo entendido quetop[0]->cpu_diff()
contiene la derivada de error de la siguiente capa, pero ¿qué pasa si no hay otra capa, cómo se inicializa? ya que se usa enEuclideanLossLayer
sin realizar ninguna verificación:
const Dtype alpha = sign * top[0]->cpu_diff()[0] / bottom[i]->num();
De nuevo, en elEuclideanLossLayer
, la derivada del error con respecto a las activaciones se calcula utilizando el siguiente fragmento de código:
const Dtype alpha = sign * top[0]->cpu_diff()[0] / bottom[i]->num();
caffe_cpu_axpby(
bottom[i]->count(), // count
alpha, // alpha
diff_.cpu_data(), // a
Dtype(0), // beta
bottom[i]->mutable_cpu_diff()); // b
Si mi primera suposición es correcta, ytop[0]->cpu_diff()
De hecho, contiene la derivada de error para la capa anterior, ¿por qué solo usamos el primer elemento?top[0]->cpu_diff()[0]
en lugar de multiplicar por todo el vector, es decirtop[0]->cpu_diff()
?