12 #ifndef MLPACK_METHODS_ANN_LAYER_SPATIAL_DROPOUT_IMPL_HPP 13 #define MLPACK_METHODS_ANN_LAYER_SPATIAL_DROPOUT_IMPL_HPP 21 template<
typename InputDataType,
typename OutputDataType>
25 scale(1.0 / (1.0 - ratio)),
34 template<
typename InputDataType,
typename OutputDataType>
40 scale(1.0 / (1.0 - ratio)),
49 template<
typename InputDataType,
typename OutputDataType>
52 const arma::Mat<eT>& input, arma::Mat<eT>& output)
54 Log::Assert(input.n_rows % size == 0,
"Input features must be divisible \ 59 batchSize = input.n_cols;
60 inputSize = input.n_rows / size;
68 output.zeros(arma::size(input));
69 arma::cube inputTemp(const_cast<arma::mat&>(input).memptr(), inputSize,
70 size, batchSize,
false,
false);
71 arma::cube outputTemp(const_cast<arma::mat&>(output).memptr(), inputSize,
72 size, batchSize,
false,
false);
73 arma::mat probabilities(1, size);
74 arma::mat maskRow(1, size);
75 probabilities.fill(ratio);
77 maskRow = bernoulli_dist.
Sample();
78 mask = arma::repmat(maskRow, inputSize, 1);
80 for (
size_t n = 0; n < batchSize; n++)
81 outputTemp.slice(n) = inputTemp.slice(n) % mask * scale;
85 template<
typename InputDataType,
typename OutputDataType>
88 const arma::Mat<eT>& input,
const arma::Mat<eT>& gy, arma::Mat<eT>& g)
90 g.zeros(arma::size(input));
91 arma::cube gyTemp(const_cast<arma::mat&>(gy).memptr(), inputSize, size,
92 batchSize,
false,
false);
93 arma::cube gTemp(const_cast<arma::mat&>(g).memptr(), inputSize, size,
94 batchSize,
false,
false);
96 for (
size_t n = 0; n < batchSize; n++)
97 gTemp.slice(n) = gyTemp.slice(n) % mask * scale;
100 template<
typename InputDataType,
typename OutputDataType>
101 template<
typename Archive>
106 ar(CEREAL_NVP(size));
107 ar(CEREAL_NVP(ratio));
108 ar(CEREAL_NVP(batchSize));
109 ar(CEREAL_NVP(inputSize));
110 ar(CEREAL_NVP(reset));
111 ar(CEREAL_NVP(deterministic));
114 scale = 1.0 / (1.0 - ratio);
void Forward(const arma::Mat< eT > &input, arma::Mat< eT > &output)
Ordinary feed forward pass of the SpatialDropout layer.
Definition: spatial_dropout_impl.hpp:51
Linear algebra utility functions, generally performed on matrices or vectors.
Definition: cv.hpp:1
Multiple independent Bernoulli distributions.
Definition: bernoulli_distribution.hpp:34
void Backward(const arma::Mat< eT > &input, const arma::Mat< eT > &gy, arma::Mat< eT > &g)
Ordinary feed backward pass of the SpatialDropout layer.
Definition: spatial_dropout_impl.hpp:87
SpatialDropout()
Create the SpatialDropout object.
Definition: spatial_dropout_impl.hpp:22
DataType Sample() const
Return a matrix of randomly generated samples according to the probability distributions defined by t...
Definition: bernoulli_distribution_impl.hpp:50
void serialize(Archive &ar, const uint32_t)
Serialize the layer.
Definition: spatial_dropout_impl.hpp:102
static void Assert(bool condition, const std::string &message="Assert Failed.")
Checks if the specified condition is true.
Definition: log.cpp:38