Евклидов слой потерь в кафе

В настоящее время я пытаюсь реализовать свой собственный уровень потерь в caffe, и, пытаясь сделать это, я использую другие слои в качестве эталона. Одна вещь, которая озадачивает меня, однако, это использованиеtop[0]->cpu_diff() вBackward_cpu, Я буду использоватьEuclideanLossLayer в качестве ссылки. Вот мои вопросы

Насколько я понимаю, чтоtop[0]->cpu_diff() содержит производную от следующего уровня ошибки, но что, если нет другого уровня, как он инициализируется? так как он используется вEuclideanLossLayer без выполнения каких-либо проверок:

const Dtype alpha = sign * top[0]->cpu_diff()[0] / bottom[i]->num();

Опять же, вEuclideanLossLayer, производная для ошибки по активациям рассчитывается с использованием следующего фрагмента кода:

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

Если мое первое предположение верно, иtop[0]->cpu_diff() действительно содержит производную ошибки для уровня выше, почему мы используем только первый элемент, т.е.top[0]->cpu_diff()[0] в отличие от умножения на весь вектор, т.е.top[0]->cpu_diff()?

Ответы на вопрос(1)

Ваш ответ на вопрос