[mlpack-git] master: Use the filter matrix for the convolution function instead of the 3rd-order tensor. (7dcf30a)
gitdub at big.cc.gt.atl.ga.us
gitdub at big.cc.gt.atl.ga.us
Thu Sep 3 08:35:43 EDT 2015
Repository : https://github.com/mlpack/mlpack
On branch : master
Link : https://github.com/mlpack/mlpack/compare/91ae1062772a0f2bbca9a072769629c2d775ae64...42d61dfdbc9b0cbce59398e67ea58544b0fa1919
>---------------------------------------------------------------
commit 7dcf30a3257fda370521210247215d05e2d6e267
Author: Marcus Edel <marcus.edel at fu-berlin.de>
Date: Thu Sep 3 14:32:17 2015 +0200
Use the filter matrix for the convolution function instead of the 3rd-order tensor.
>---------------------------------------------------------------
7dcf30a3257fda370521210247215d05e2d6e267
src/mlpack/methods/ann/layer/conv_layer.hpp | 29 ++++++++++++-----------------
1 file changed, 12 insertions(+), 17 deletions(-)
diff --git a/src/mlpack/methods/ann/layer/conv_layer.hpp b/src/mlpack/methods/ann/layer/conv_layer.hpp
index a6498c4..5d6f7a1 100644
--- a/src/mlpack/methods/ann/layer/conv_layer.hpp
+++ b/src/mlpack/methods/ann/layer/conv_layer.hpp
@@ -110,19 +110,16 @@ class ConvLayer
const size_t wConv = ConvOutSize(input.n_rows, wfilter, xStride, wPad);
const size_t hConv = ConvOutSize(input.n_cols, hfilter, yStride, hPad);
- output = arma::Cube<eT>(wConv, hConv, outMaps);
+ output = arma::zeros<arma::Cube<eT> >(wConv, hConv, outMaps);
for (size_t outMap = 0, outMapIdx = 0; outMap < outMaps; outMap++)
{
for (size_t inMap = 0; inMap < inMaps; inMap++, outMapIdx++)
{
- arma::Cube<eT> inputSlices = input.slices(inMap, inMap);
+ arma::Mat<eT> convOutput;
+ ForwardConvolutionRule::Convolution(input.slice(inMap),
+ weights.slice(outMap), convOutput);
- arma::Cube<eT> convOutput;
- ForwardConvolutionRule::Convolution(inputSlices,
- weights.slice(inMap * outMaps +
- outMap), convOutput);
-
- output.slices(outMap, outMap) += convOutput;
+ output.slice(outMap) += convOutput;
}
}
}
@@ -137,28 +134,26 @@ class ConvLayer
* @param g The calculated gradient.
*/
template<typename eT>
- void Backward(const arma::Cube<eT>& input,
+ void Backward(const arma::Cube<eT>& /* unused */,
const arma::Cube<eT>& gy,
arma::Cube<eT>& g)
{
- g = arma::zeros<arma::Cube<eT> >(input.n_rows,
- input.n_cols,
- input.n_slices);
+ g = arma::zeros<arma::Cube<eT> >(inputParameter.n_rows,
+ inputParameter.n_cols,
+ inputParameter.n_slices);
for (size_t outMap = 0, outMapIdx = 0; outMap < inMaps; outMap++)
{
for (size_t inMap = 0; inMap < outMaps; inMap++, outMapIdx++)
{
- arma::Cube<eT> errorSlices = gy.slices(inMap, inMap);
-
arma::Mat<eT> rotatedFilter;
Rotate180(weights.slice(outMap * outMaps + inMap), rotatedFilter);
- arma::Cube<eT> output;
- BackwardConvolutionRule::Convolution(errorSlices, rotatedFilter,
+ arma::Mat<eT> output;
+ BackwardConvolutionRule::Convolution(gy.slice(inMap), rotatedFilter,
output);
- g.slices(outMap, outMap) += output;
+ g.slice(outMap) += output;
}
}
}
More information about the mlpack-git
mailing list