Style fix
Use Padding layer pointer
This commit is contained in:
@@ -282,7 +282,7 @@ class Convolution
|
||||
arma::cube gradientTemp;
|
||||
|
||||
//! Locally-stored padding layer.
|
||||
LayerTypes<> padding;
|
||||
Padding<>* padding;
|
||||
|
||||
//! Locally-stored delta object.
|
||||
OutputDataType delta;
|
||||
|
||||
@@ -15,8 +15,6 @@
|
||||
// In case it hasn't yet been included.
|
||||
#include "convolution.hpp"
|
||||
|
||||
#include "../visitor/forward_visitor.hpp"
|
||||
|
||||
namespace mlpack {
|
||||
namespace ann /** Artificial Neural Network. */ {
|
||||
|
||||
@@ -76,7 +74,7 @@ Convolution<
|
||||
outputHeight(0)
|
||||
{
|
||||
weights.set_size((outSize * inSize * kW * kH) + outSize, 1);
|
||||
padding = new Padding<>(padW, padH);
|
||||
padding = new Padding<>(padW, padW, padH, padH);
|
||||
}
|
||||
|
||||
template<
|
||||
@@ -126,8 +124,8 @@ void Convolution<
|
||||
inputTemp.n_cols + padH * 2, inputTemp.n_slices);
|
||||
for (size_t i = 0; i < inputTemp.n_slices; ++i)
|
||||
{
|
||||
boost::apply_visitor(ForwardVisitor(std::move(inputTemp.slice(i)),
|
||||
std::move(inputPaddedTemp.slice(i))), padding);
|
||||
padding->Forward(std::move(inputTemp.slice(i)),
|
||||
std::move(inputPaddedTemp.slice(i)));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -37,11 +37,15 @@ class Padding
|
||||
/**
|
||||
* Create the Padding object using the specified number of output units.
|
||||
*
|
||||
* @param padW Padding width of the input.
|
||||
* @param padH Padding height of the input.
|
||||
* @param padWLeft Left padding width of the input.
|
||||
* @param padWLeft Right padding width of the input.
|
||||
* @param padHTop Top padding height of the input.
|
||||
* @param padHBottom Bottom padding height of the input.
|
||||
*/
|
||||
Padding(const size_t padW = 0,
|
||||
const size_t padH = 0);
|
||||
Padding(const size_t padWLeft = 0,
|
||||
const size_t padWRight = 0,
|
||||
const size_t padHTop = 0,
|
||||
const size_t padHBottom = 0);
|
||||
|
||||
/**
|
||||
* Ordinary feed forward pass of a neural network, evaluating the function
|
||||
@@ -84,11 +88,17 @@ class Padding
|
||||
void serialize(Archive& ar, const unsigned int /* version */);
|
||||
|
||||
private:
|
||||
//! Locally-stored padding width.
|
||||
size_t padW;
|
||||
//! Locally-stored left padding width.
|
||||
size_t padWLeft;
|
||||
|
||||
//! Locally-stored padding height.
|
||||
size_t padH;
|
||||
//! Locally-stored right padding width.
|
||||
size_t padWRight;
|
||||
|
||||
//! Locally-stored top padding height.
|
||||
size_t padHTop;
|
||||
|
||||
//! Locally-stored bottom padding height.
|
||||
size_t padHBottom;
|
||||
|
||||
//! Locally-stored number of rows and columns of input.
|
||||
size_t nRows, nCols;
|
||||
|
||||
@@ -21,10 +21,14 @@ namespace ann /** Artificial Neural Network. */ {
|
||||
|
||||
template<typename InputDataType, typename OutputDataType>
|
||||
Padding<InputDataType, OutputDataType>::Padding(
|
||||
const size_t padW,
|
||||
const size_t padH) :
|
||||
padW(padW),
|
||||
padH(padH),
|
||||
const size_t padWLeft,
|
||||
const size_t padWRight,
|
||||
const size_t padHTop,
|
||||
const size_t padHBottom) :
|
||||
padWLeft(padWLeft),
|
||||
padWRight(padWRight),
|
||||
padHTop(padHTop),
|
||||
padHBottom(padHBottom),
|
||||
nRows(0),
|
||||
nCols(0)
|
||||
{
|
||||
@@ -38,9 +42,10 @@ void Padding<InputDataType, OutputDataType>::Forward(
|
||||
{
|
||||
nRows = input.n_rows;
|
||||
nCols = input.n_cols;
|
||||
output = arma::zeros(input.n_rows + padW * 2, input.n_cols + padH * 2);
|
||||
output.submat(padW, padH, padW + input.n_rows - 1,
|
||||
padH + input.n_cols - 1) = input;
|
||||
output = arma::zeros(input.n_rows + padWLeft + padWRight,
|
||||
input.n_cols + padHTop + padHBottom);
|
||||
output.submat(padWLeft, padHTop, padWLeft + input.n_rows - 1,
|
||||
padHTop + input.n_cols - 1) = input;
|
||||
}
|
||||
|
||||
template<typename InputDataType, typename OutputDataType>
|
||||
@@ -50,8 +55,8 @@ void Padding<InputDataType, OutputDataType>::Backward(
|
||||
const arma::Mat<eT>&& gy,
|
||||
arma::Mat<eT>&& g)
|
||||
{
|
||||
g = gy.submat(padW, padH, padW + nRows - 1,
|
||||
padH + nCols - 1);
|
||||
g = gy.submat(padWLeft, padHTop, padWLeft + nRows - 1,
|
||||
padHTop + nCols - 1);
|
||||
}
|
||||
|
||||
template<typename InputDataType, typename OutputDataType>
|
||||
@@ -59,8 +64,10 @@ template<typename Archive>
|
||||
void Padding<InputDataType, OutputDataType>::serialize(
|
||||
Archive& ar, const unsigned int /* version */)
|
||||
{
|
||||
ar & BOOST_SERIALIZATION_NVP(padW);
|
||||
ar & BOOST_SERIALIZATION_NVP(padH);
|
||||
ar & BOOST_SERIALIZATION_NVP(padWLeft);
|
||||
ar & BOOST_SERIALIZATION_NVP(padWRight);
|
||||
ar & BOOST_SERIALIZATION_NVP(padHTop);
|
||||
ar & BOOST_SERIALIZATION_NVP(padHBottom);
|
||||
}
|
||||
|
||||
} // namespace ann
|
||||
|
||||
Reference in New Issue
Block a user