|
|
@ -145,7 +145,7 @@ void ExpandConvBaseLayer::expandFwdOnce(MatrixPtr image,
|
|
|
|
real *expInData = expandInput_->getData();
|
|
|
|
real *expInData = expandInput_->getData();
|
|
|
|
for (int g = 0; g < groups_[inIdx]; ++g) {
|
|
|
|
for (int g = 0; g < groups_[inIdx]; ++g) {
|
|
|
|
MatrixPtr A =
|
|
|
|
MatrixPtr A =
|
|
|
|
Matrix::create(wgtData, subK, subM, true, useGpu_); // mark transpose
|
|
|
|
Matrix::create(wgtData, subM, subK, false, useGpu_); // mark transpose
|
|
|
|
MatrixPtr B = Matrix::create(expInData, subK, subN, false, useGpu_);
|
|
|
|
MatrixPtr B = Matrix::create(expInData, subK, subN, false, useGpu_);
|
|
|
|
MatrixPtr C = Matrix::create(outData, subM, subN, false, useGpu_);
|
|
|
|
MatrixPtr C = Matrix::create(outData, subM, subN, false, useGpu_);
|
|
|
|
C->mul(A, B, 1, 1);
|
|
|
|
C->mul(A, B, 1, 1);
|
|
|
@ -182,7 +182,7 @@ void ExpandConvBaseLayer::bpropActs(MatrixPtr out,
|
|
|
|
// create temporary matrix
|
|
|
|
// create temporary matrix
|
|
|
|
MatrixPtr C = Matrix::create(expandInData, subK, subN, false, useGpu_);
|
|
|
|
MatrixPtr C = Matrix::create(expandInData, subK, subN, false, useGpu_);
|
|
|
|
MatrixPtr B = Matrix::create(localGradData, subM, subN, false, useGpu_);
|
|
|
|
MatrixPtr B = Matrix::create(localGradData, subM, subN, false, useGpu_);
|
|
|
|
MatrixPtr A = Matrix::create(wgtData, subK, subM, false, useGpu_);
|
|
|
|
MatrixPtr A = Matrix::create(wgtData, subM, subK, true, useGpu_);
|
|
|
|
C->mul(A, B); // mul
|
|
|
|
C->mul(A, B); // mul
|
|
|
|
|
|
|
|
|
|
|
|
// clear the temporary matrix
|
|
|
|
// clear the temporary matrix
|
|
|
@ -247,10 +247,10 @@ void ExpandConvBaseLayer::bpropWeights(MatrixPtr image,
|
|
|
|
|
|
|
|
|
|
|
|
// expand-mul one-group by one
|
|
|
|
// expand-mul one-group by one
|
|
|
|
for (int g = 0; g < groups_[inpIdx]; g++) {
|
|
|
|
for (int g = 0; g < groups_[inpIdx]; g++) {
|
|
|
|
MatrixPtr A = Matrix::create(expandInData, subK, subN, false, useGpu_);
|
|
|
|
MatrixPtr A = Matrix::create(expandInData, subK, subN, true, useGpu_);
|
|
|
|
MatrixPtr B = Matrix::create(gradData, subM, subN, true, useGpu_);
|
|
|
|
MatrixPtr B = Matrix::create(gradData, subM, subN, false, useGpu_);
|
|
|
|
MatrixPtr C = Matrix::create(wGradData, subK, subM, false, useGpu_);
|
|
|
|
MatrixPtr C = Matrix::create(wGradData, subM, subK, false, useGpu_);
|
|
|
|
C->mul(A, B, 1, 1);
|
|
|
|
C->mul(B, A, 1, 1);
|
|
|
|
|
|
|
|
|
|
|
|
A->clear();
|
|
|
|
A->clear();
|
|
|
|
B->clear();
|
|
|
|
B->clear();
|
|
|
|