13 #ifndef MLPACK_METHODS_ANN_LAYER_ADAPTIVE_MEAN_POOLING_HPP
14 #define MLPACK_METHODS_ANN_LAYER_ADAPTIVE_MEAN_POOLING_HPP
31 typename InputDataType = arma::mat,
32 typename OutputDataType = arma::mat
47 const size_t outputHeight);
64 void Forward(
const arma::Mat<eT>& input, arma::Mat<eT>& output);
77 const arma::Mat<eT>& gy,
82 {
return poolingLayer.OutputParameter(); }
88 const OutputDataType&
Delta()
const {
return poolingLayer.Delta(); }
90 OutputDataType&
Delta() {
return poolingLayer.Delta(); }
93 size_t InputWidth()
const {
return poolingLayer.InputWidth(); }
95 size_t&
InputWidth() {
return poolingLayer.InputWidth(); }
98 size_t InputHeight()
const {
return poolingLayer.InputHeight(); }
113 size_t InputSize()
const {
return poolingLayer.InputSize(); }
116 size_t OutputSize()
const {
return poolingLayer.OutputSize(); }
121 template<
typename Archive>
122 void serialize(Archive& ar,
const unsigned int version);
128 void IntializeAdaptivePadding()
130 poolingLayer.StrideWidth() = std::floor(poolingLayer.InputWidth() /
132 poolingLayer.StrideHeight() = std::floor(poolingLayer.InputHeight() /
135 poolingLayer.KernelWidth() = poolingLayer.InputWidth() -
136 (outputWidth - 1) * poolingLayer.StrideWidth();
137 poolingLayer.KernelHeight() = poolingLayer.InputHeight() -
138 (outputHeight - 1) * poolingLayer.StrideHeight();
140 if (poolingLayer.KernelHeight() <= 0 || poolingLayer.KernelWidth() <= 0 ||
141 poolingLayer.StrideWidth() <= 0 || poolingLayer.StrideHeight() <= 0)
143 Log::Fatal <<
"Given output shape (" << outputWidth <<
", "
144 << outputHeight <<
") is not possible for given input shape ("
145 << poolingLayer.InputWidth() <<
", " << poolingLayer.InputHeight()
146 <<
")." << std::endl;
151 MeanPooling<InputDataType, OutputDataType> poolingLayer;
167 #include "adaptive_mean_pooling_impl.hpp"