cblas関数を使用する方法がありますが、これは少し面倒です。
「すべて1」のベクトルを定義し、このベクトルと行列の間にドット積をすると、結果が合計になります。
はmyBlob
は、要素あなたは合計するカフェのブロブとしよう:
vector<Dtype> mult_data(myBlob.count(), Dtype(1));
Dtype sum = caffe_cpu_dot(myBlob.count(), &mult_data[0], myBlob.cpu_data());
このトリックはimplementation of "Reduction"
layerに使用されています。
両方のGPU mult_data
なくstd::vector
ためBlob
を割り当てるに準拠し、1が必要(あなたはそれがpgu_data()
だ必要があるため)この答えをするために:GPU用
vector<int> sum_mult_shape(1, diff_.count());
Blob<Dtype> sum_multiplier_(sum_mult_shape);
const Dtype* mult_data = sum_multiplier_.cpu_data();
Dtype sum = caffe_cpu_dot(myBlob.count(), &mult_data[0], myBlob.cpu_data());
、(中'.cu'
ソースファイル):
vector<int> sum_mult_shape(1, diff_.count());
Blob<Dtype> sum_multiplier_(sum_mult_shape);
const Dtype* mult_data = sum_multiplier_.gpu_data();
Dtype sum;
caffe_gpu_dot(myBlob.count(), &mult_data[0], myBlob.gpu_data(), &sum);
@Ali私の編集をご覧ください。 – Shai
ありがとうございました。 – Ali