2017-01-16 4 views
0

In der inneren Produktschicht muss ich (top_diff * bottom_data) .* (2*weight) multiplizieren. Zuerst berechnen wir (result = top_diff * bottom_data) als Matrixmultiplikation in und führen dann einen dot product zwischen weight und result.Wie man Punktprodukt zwischen Matrizen in caffe macht?

Weitere Erklärung wird wie folgt definiert:

const Dtype* weight = this->blobs_[0]->cpu_data(); 
    if (this->param_propagate_down_[0]) { 
      const Dtype* top_diff = top[0]->cpu_diff(); 
      const Dtype* bottom_data = bottom[0]->cpu_data(); 
caffe_cpu_gemm<Dtype>(CblasTrans, CblasNoTrans, N_, K_, M_, (Dtype)1., 
     top_diff, bottom_data, (Dtype)1., this->blobs_[0]->mutable_cpu_diff()); 
} 

Für mehr Verständnis, ich geprüft math_function.c. Es wird wie folgt implementiert:

template<> 
void caffe_cpu_gemm<float>(const CBLAS_TRANSPOSE TransA, 
    const CBLAS_TRANSPOSE TransB, const int M, const int N, const int K, 
    const float alpha, const float* A, const float* B, const float beta, 
    float* C) { 
    int lda = (TransA == CblasNoTrans) ? K : M; 
    int ldb = (TransB == CblasNoTrans) ? N : K; 
    cblas_sgemm(CblasRowMajor, TransA, TransB, M, N, K, alpha, A, lda, B, 
     ldb, beta, C, N); 
} 

Ich glaube, ich sollte in caffe_cpu_gemm() Multiplikation (result = top_diff * bottom_data) durchführen und danach tun dot product mit weight. wie soll ich es machen?!

Vielen Dank !!!! Jeder Rat würde geschätzt werden!

Antwort

1

Wenn Sie nur Skalarprodukt zwischen zwei Matrizen durchführen möchten, können Sie die folgende Funktion verwenden Matrizen multiplizieren auf CPU,

void caffe_mul<float>(const int n, const float* a, const float* b, float* y)

Wenn Sie auf einer GPU die gleiche Operation zu tun, verwenden diese Vorlage

void caffe_gpu_mul<float>(const int N, const float* a, const float* b, float* y) 

a und b sind Matrizen und c wird das Endergebnis enthalten. N ist die Gesamtzahl der Elemente in Ihrer Matrix.

Sie können auch die "Eltwise" Ebene verwenden, die dies bereits tut.

Verwandte Themen