diff --git a/src/mlpack/methods/ann/layer/atrous_convolution_impl.hpp b/src/mlpack/methods/ann/layer/atrous_convolution_impl.hpp index bac305fa33..377bdcb69f 100644 --- a/src/mlpack/methods/ann/layer/atrous_convolution_impl.hpp +++ b/src/mlpack/methods/ann/layer/atrous_convolution_impl.hpp @@ -246,17 +246,8 @@ void AtrousConvolution< arma::Mat&& error, arma::Mat&& gradient) { - arma::cube mappedError; - if (padW != 0 && padH != 0) - { - mappedError = arma::cube(error.memptr(), outputWidth / padW, - outputHeight / padH, outSize * batchSize, false, false); - } - else - { - mappedError = arma::cube(error.memptr(), outputWidth, - outputHeight, outSize * batchSize, false, false); - } + arma::cube mappedError(error.memptr(), outputWidth, outputHeight, + outSize * batchSize, false, false); gradient.set_size(weights.n_elem, 1); gradientTemp = arma::Cube(gradient.memptr(), weight.n_rows, @@ -303,13 +294,17 @@ void AtrousConvolution< } } - if ((padW != 0 || padH != 0) && - (gradientTemp.n_rows < output.n_rows && - gradientTemp.n_cols < output.n_cols)) + if (gradientTemp.n_rows < output.n_rows || + gradientTemp.n_cols < output.n_cols) { - gradientTemp.slice(outMapIdx) += output.submat(padW, padH, - padW + gradientTemp.n_rows - 1, - padH + gradientTemp.n_cols - 1); + gradientTemp.slice(outMapIdx) += output.submat(0, 0, + gradientTemp.n_rows - 1, gradientTemp.n_cols - 1); + } + else if (gradientTemp.n_rows > output.n_rows || + gradientTemp.n_cols > output.n_cols) + { + gradientTemp.slice(outMapIdx).submat(0, 0, output.n_rows - 1, + output.n_cols - 1) += output; } else { diff --git a/src/mlpack/methods/ann/layer/convolution_impl.hpp b/src/mlpack/methods/ann/layer/convolution_impl.hpp index e06905b845..036f548cf1 100644 --- a/src/mlpack/methods/ann/layer/convolution_impl.hpp +++ b/src/mlpack/methods/ann/layer/convolution_impl.hpp @@ -239,17 +239,8 @@ void Convolution< arma::Mat&& error, arma::Mat&& gradient) { - arma::cube mappedError; - if (padW != 0 && padH != 0) - { - mappedError = arma::cube(error.memptr(), outputWidth / padW, - outputHeight / padH, outSize * batchSize, false, false); - } - else - { - mappedError = arma::cube(error.memptr(), outputWidth, - outputHeight, outSize * batchSize, false, false); - } + arma::cube mappedError(error.memptr(), outputWidth, + outputHeight, outSize * batchSize, false, false); gradient.set_size(weights.n_elem, 1); gradientTemp = arma::Cube(gradient.memptr(), weight.n_rows, @@ -283,13 +274,17 @@ void Convolution< GradientConvolutionRule::Convolution(inputSlice, deltaSlice, output, dW, dH); - if ((padW != 0 || padH != 0) && - (gradientTemp.n_rows < output.n_rows && - gradientTemp.n_cols < output.n_cols)) + if (gradientTemp.n_rows < output.n_rows || + gradientTemp.n_cols < output.n_cols) { - gradientTemp.slice(outMapIdx) += output.submat(padW, padH, - padW + gradientTemp.n_rows - 1, - padH + gradientTemp.n_cols - 1); + gradientTemp.slice(outMapIdx) += output.submat(0, 0, + gradientTemp.n_rows - 1, gradientTemp.n_cols - 1); + } + else if (gradientTemp.n_rows > output.n_rows || + gradientTemp.n_cols > output.n_cols) + { + gradientTemp.slice(outMapIdx).submat(0, 0, output.n_rows - 1, + output.n_cols - 1) += output; } else { diff --git a/src/mlpack/methods/ann/layer/reparametrization.hpp b/src/mlpack/methods/ann/layer/reparametrization.hpp index 48451f02b4..1fc299e2ba 100644 --- a/src/mlpack/methods/ann/layer/reparametrization.hpp +++ b/src/mlpack/methods/ann/layer/reparametrization.hpp @@ -130,15 +130,15 @@ class Reparametrization //! Locally-stored number of output units. size_t latentSize; - //! The beta hyperparameter for constrained variational frameworks. - double beta; - //! If false, sample will be constant. bool stochastic; //! If false, KL error will not be included in Backward function. bool includeKl; + //! The beta hyperparameter for constrained variational frameworks. + double beta; + //! Locally-stored delta object. OutputDataType delta;