кофе на заказ евклидов

Мне нужно сделать довольно простую вещь, используя платформу caffe. Я хочу создать новый пользовательский евклидов слой C ++. Этот слой должен установить все значения нижнего [1] BLOB (данные истинности земли) на соответствующее значение bottom [0] BLOB, когда это соответствующее значение ниже определенного значения. Потери L2 будут затем рассчитываться между этим измененным дном [1] и дном [0]. Функция backward_cpu () также должна быть изменена.

Это можно легко сделать в Matlab / Python, найдя индексы bottom [0] ниже этого порогового значения. Но как эффективно кодировать это в c ++ с использованием BLOB-объектов инфраструктуры caffe, мне не по силам, тем более что мне также потребуется реализация на GPU. Я мог бы последовательно перебирать все элементы BLOB, но это было бы неэффективно. Могу ли я привести данные BLOB в вектор<> что более эффективно обрабатывается в c ++?

Например, относительно кода cpu_forward:

template <typename Dtype>
void EuclideanLossLayer<Dtype>::Forward_cpu(const vector<Blob<Dtype>*>&   bottom,
const vector<Blob<Dtype>*>& top) {
int count = bottom[0]->count();
threshold = 60;
caffe_sub(
count,
bottom[0]->cpu_data(),
bottom[1]->cpu_data(),
diff_.mutable_cpu_data());
float* data = blob->mutable_cpu_data();
for (int i =0; i < count; i++) {
if data[1][i] < threshold {
data[1][i] = data[0][i];
}
}
Dtype dot = caffe_cpu_dot(count, diff_.cpu_data(), diff_.cpu_data());
Dtype loss = dot / bottom[0]->num() / Dtype(2);
top[0]->mutable_cpu_data()[0] = loss;
}

К сожалению, я не совсем понимаю, как следующие строки вычисляют евклидову стоимость S = ∑i = (yi − h (xi)) ^ 2, чтобы изменить код:

Dtype dot = caffe_cpu_dot(count, diff_.cpu_data(), diff_.cpu_data());
Dtype loss = dot / bottom[0]->num() / Dtype(2);
top[0]->mutable_cpu_data()[0] = loss;

Я бы хотел, чтобы теперь произведение точек вычислялось между измененным дном [1] и дном [0]. Какие-либо предложения?

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]