Skip to content

Commit 54af45e

Browse files
committed
Fixed a bug on back-propagation detected using my unit tests
1 parent 4a3aaba commit 54af45e

2 files changed

Lines changed: 37 additions & 32 deletions

File tree

tmva/tmva/src/DNN/Architectures/Cpu/Propagation.cxx

Lines changed: 21 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -556,25 +556,30 @@ void TCpu<AFloat>::Downsample(TCpuMatrix<AFloat> &A, TCpuMatrix<AFloat> &B, cons
556556

557557
//____________________________________________________________________________
558558
template <typename AFloat>
559-
void TCpu<AFloat>::MaxPoolLayerBackward(std::vector<TCpuMatrix<AFloat>> &activationGradientsBackward,
560-
const std::vector<TCpuMatrix<AFloat>> &activationGradients,
561-
const std::vector<TCpuMatrix<AFloat>> &indexMatrix, size_t batchSize,
562-
size_t depth, size_t nLocalViews)
559+
void TCpu<AFloat>::MaxPoolLayerBackward(TCpuMatrix<AFloat> &activationGradientsBackward,
560+
const TCpuMatrix<AFloat> &activationGradients,
561+
const TCpuMatrix<AFloat> &indexMatrix,
562+
size_t imgHeight,
563+
size_t imgWidth,
564+
size_t fltHeight,
565+
size_t fltWidth,
566+
size_t strideRows,
567+
size_t strideCols,
568+
size_t nLocalViews)
563569
{
564-
for (size_t i = 0; i < batchSize; i++) {
565-
for (size_t j = 0; j < depth; j++) {
570+
size_t depth = activationGradientsBackward.GetNrows();
566571

567-
// initialize to zeros
568-
for (size_t t = 0; t < (size_t)activationGradientsBackward[i].GetNcols(); t++) {
569-
activationGradientsBackward[i](j, t) = 0;
570-
}
572+
for (size_t j = 0; j < depth; j++) {
573+
// initialize to zeros
574+
for (size_t t = 0; t < (size_t)activationGradientsBackward.GetNcols(); t++) {
575+
activationGradientsBackward(j, t) = 0;
576+
}
571577

572-
// set values
573-
for (size_t k = 0; k < nLocalViews; k++) {
574-
AFloat grad = activationGradients[i](j, k);
575-
size_t winningIdx = indexMatrix[i](j, k);
576-
activationGradientsBackward[i](j, winningIdx) += grad;
577-
}
578+
// set values
579+
for (size_t k = 0; k < nLocalViews; k++) {
580+
AFloat grad = activationGradients(j, k);
581+
size_t winningIdx = indexMatrix(j, k);
582+
activationGradientsBackward(j, winningIdx) += grad;
578583
}
579584
}
580585
}

tmva/tmva/src/DNN/Architectures/Reference/Propagation.cxx

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -375,25 +375,25 @@ void TReference<AReal>::Downsample(TMatrixT<AReal> &A, TMatrixT<AReal> &B, const
375375

376376
//______________________________________________________________________________
377377
template <typename AReal>
378-
void TReference<AReal>::MaxPoolLayerBackward(std::vector<TMatrixT<AReal>> &activationGradientsBackward,
379-
const std::vector<TMatrixT<AReal>> &activationGradients,
380-
const std::vector<TMatrixT<AReal>> &indexMatrix, size_t batchSize,
381-
size_t depth, size_t nLocalViews)
378+
void TReference<AReal>::MaxPoolLayerBackward(TMatrixT<AReal> &activationGradientsBackward,
379+
const TMatrixT<AReal> &activationGradients,
380+
const TMatrixT<AReal> &indexMatrix,
381+
size_t imgHeight, size_t imgWidth, size_t fltHeight,
382+
size_t fltWidth, size_t strideRows, size_t strideCols, size_t nLocalViews)
382383
{
383-
for (size_t i = 0; i < batchSize; i++) {
384-
for (size_t j = 0; j < depth; j++) {
384+
size_t depth = activationGradientsBackward.GetNrows();
385385

386-
// initialize to zeros
387-
for (size_t t = 0; t < (size_t)activationGradientsBackward[i].GetNcols(); t++) {
388-
activationGradientsBackward[i][j][t] = 0;
389-
}
386+
for (size_t j = 0; j < depth; j++) {
387+
// initialize to zeros
388+
for (size_t t = 0; t < (size_t)activationGradientsBackward.GetNcols(); t++) {
389+
activationGradientsBackward[j][t] = 0;
390+
}
390391

391-
// set values
392-
for (size_t k = 0; k < nLocalViews; k++) {
393-
AReal grad = activationGradients[i][j][k];
394-
size_t winningIdx = indexMatrix[i][j][k];
395-
activationGradientsBackward[i][j][winningIdx] = grad;
396-
}
392+
// set values
393+
for (size_t k = 0; k < nLocalViews; k++) {
394+
AReal grad = activationGradients[j][k];
395+
size_t winningIdx = indexMatrix[j][k];
396+
activationGradientsBackward[j][winningIdx] += grad;
397397
}
398398
}
399399
}

0 commit comments

Comments
 (0)