serialized padding layers

This commit is contained in:
pulkit6559
2019-11-17 14:12:12 +05:30
parent 06f17d40af
commit b9890f4f4c
2 changed files with 31 additions and 3 deletions
@@ -364,6 +364,27 @@ class TransposedConvolution
} // namespace ann
} // namespace mlpack
//! Set the serialization version of the Transposed Convolution class.
namespace boost {
namespace serialization {
template<
typename ForwardConvolutionRule,
typename BackwardConvolutionRule,
typename GradientConvolutionRule,
typename InputDataType,
typename OutputDataType
>
struct version<
mlpack::ann::TransposedConvolution<ForwardConvolutionRule, BackwardConvolutionRule,
GradientConvolutionRule, InputDataType, OutputDataType> >
{
BOOST_STATIC_CONSTANT(int, value = 1);
};
} // namespace serialization
} // namespace boost
// Include implementation.
#include "transposed_convolution_impl.hpp"
@@ -81,6 +81,10 @@ TransposedConvolution<
aW = (outputWidth + kW - 2 * this->padW - 2) % dW;
aH = (outputHeight + kH - 2 * this->padH - 2) % dH;
paddingForward = new Padding<>(this->padW, this->padW + aW, this->padH, this->padH + aH);
paddingBackward = new Padding<>(kW - this->padW - 1, kW - this->padW - 1,
kH - this->padH - 1, kH - this->padH - 1);
// Check if the output height and width are possible given the other
// parameters of the layer.
if (outputWidth != dW * (inputWidth - 1) + aW + 2 * this->padW + 2 - kW ||
@@ -128,7 +132,6 @@ void TransposedConvolution<
OutputDataType
>::Forward(const arma::Mat<eT>&& input, arma::Mat<eT>&& output)
{
paddingForward = new Padding<>(padW, padW + aW, padH, padH + aH);
batchSize = input.n_cols;
inputTemp = arma::cube(const_cast<arma::Mat<eT>&&>(input).memptr(),
inputWidth, inputHeight, inSize * batchSize, false, false);
@@ -228,7 +231,6 @@ void TransposedConvolution<
{
size_t wPad = kW - padW - 1;
size_t hPad = kH - padH - 1;
paddingBackward = new Padding<>(wPad, wPad, hPad, hPad);
mappedErrorPadded.set_size(mappedError.n_rows + wPad * 2,
mappedError.n_cols + hPad * 2, mappedError.n_slices);
@@ -350,7 +352,7 @@ void TransposedConvolution<
InputDataType,
OutputDataType
>::serialize(
Archive& ar, const unsigned int /* version */)
Archive& ar, const unsigned int version)
{
ar & BOOST_SERIALIZATION_NVP(inSize);
ar & BOOST_SERIALIZATION_NVP(outSize);
@@ -366,6 +368,11 @@ void TransposedConvolution<
ar & BOOST_SERIALIZATION_NVP(outputWidth);
ar & BOOST_SERIALIZATION_NVP(outputHeight);
if(version > 0){
ar & BOOST_SERIALIZATION_NVP(paddingForward);
ar & BOOST_SERIALIZATION_NVP(paddingBackward);
}
if (Archive::is_loading::value)
{
weights.set_size((outSize * inSize * kW * kH) + outSize, 1);