27#ifndef MAXPOOLLAYER_H_
28#define MAXPOOLLAYER_H_
58template <
typename Architecture_t>
62 using Tensor_t =
typename Architecture_t::Tensor_t;
63 using Matrix_t =
typename Architecture_t::Matrix_t;
64 using Scalar_t =
typename Architecture_t::Scalar_t;
107 TMaxPoolLayer(
size_t BatchSize,
size_t InputDepth,
size_t InputHeight,
size_t InputWidth,
size_t FilterHeight,
108 size_t FilterWidth,
size_t StrideRows,
size_t StrideCols,
Scalar_t DropoutProbability);
167template <
typename Architecture_t>
169 size_t filterHeight,
size_t filterWidth,
size_t strideRows,
170 size_t strideCols,
Scalar_t dropoutProbability)
172 batchSize, inputDepth, inputHeight, inputWidth, inputDepth,
173 TConvLayer<Architecture_t>::calculateDimension(inputHeight, filterHeight, 0, strideRows),
174 TConvLayer<Architecture_t>::calculateDimension(inputWidth, filterWidth, 0, strideCols), 0, 0, 0, 0, 0,
176 batchSize, inputDepth,
177 TConvLayer<Architecture_t>::calculateNLocalViews(inputHeight, filterHeight, 0, strideRows, inputWidth,
178 filterWidth, 0, strideCols),
183 inputWidth, filterWidth, 0, strideCols)),
191template <
typename Architecture_t>
203template <
typename Architecture_t>
215template <
typename Architecture_t>
232template <
typename Architecture_t>
239 Architecture_t::Downsample(
246template <
typename Architecture_t>
254 Architecture_t::MaxPoolLayerBackward(
263template <
typename Architecture_t>
266 std::cout <<
" POOL Layer: \t";
267 std::cout <<
"( W = " << this->
GetWidth() <<
" , ";
268 std::cout <<
" H = " << this->
GetHeight() <<
" , ";
269 std::cout <<
" D = " << this->
GetDepth() <<
" ) ";
271 std::cout <<
"\t Filter ( W = " << this->
GetFilterWidth() <<
" , ";
275 std::cout <<
"\tOutput = ( " << this->
GetOutput().GetFirstSize() <<
" , " << this->
GetOutput().GetCSize()
276 <<
" , " << this->
GetOutput().GetHSize() <<
" , " << this->
GetOutput().GetWSize() <<
" ) ";
278 std::cout << std::endl;
282template <
typename Architecture_t>
296template <
typename Architecture_t>
303template <
typename Architecture_t>
305 Architecture_t::InitializePoolDescriptors(
fDescriptors,
this);
308template <
typename Architecture_t>
314template <
typename Architecture_t>
325template <
typename Architecture_t>
typename TCpu< AReal >::Tensor_t Tensor_t
const TWorkspace * GetWorkspace() const
void InitializeWorkspace()
TDescriptors * GetDescriptors()
typename TCpu< AReal >::AlgorithmHelper_t AlgorithmHelper_t
TWorkspace * GetWorkspace()
typename TCpu< AReal >::Matrix_t Matrix_t
void ReleaseDescriptors()
Scalar_t GetDropoutProbability() const
typename TCpu< AReal >::EmptyDescriptor_t WeightsDescriptor_t
typename TCpu< AReal >::ReduceTensorDescriptor_t ReduceTensorDescriptor_t
size_t GetStrideRows() const
TDescriptors * fDescriptors
size_t GetFilterWidth() const
TMaxPoolLayer(const TMaxPoolLayer &)
Copy constructor.
TMaxPoolLayer(size_t BatchSize, size_t InputDepth, size_t InputHeight, size_t InputWidth, size_t FilterHeight, size_t FilterWidth, size_t StrideRows, size_t StrideCols, Scalar_t DropoutProbability)
Constructor.
typename TCpu< AReal >::AlgorithmForward_t AlgorithmForward_t
void InitializeDescriptors()
typename TCpu< AReal >::DropoutDescriptor_t HelperDescriptor_t
Scalar_t fDropoutProbability
typename TCpu< AReal >::AlgorithmBackward_t AlgorithmBackward_t
void Backward(Tensor_t &gradients_backward, const Tensor_t &activations_backward) override
Depending on the winning units determined during the Forward pass, it only forwards the derivatives t...
void AddWeightsXMLTo(void *parent) override
Writes the information and the weights about the layer in an XML node.
void Print() const override
Prints the info about the layer.
typename TCpu< AReal >::Scalar_t Scalar_t
Tensor_t & GetIndexTensor()
const Tensor_t & GetIndexTensor() const
TMaxPoolLayer(TMaxPoolLayer< Architecture_t > *layer)
Copy the max pooling layer provided as a pointer.
typename TCpu< AReal >::PoolingDescriptor_t LayerDescriptor_t
typename TCpu< AReal >::AlgorithmDataType_t AlgorithmDataType_t
size_t GetFilterHeight() const
size_t GetNLocalViews() const
void ReadWeightsFromXML(void *parent) override
Read the information and the weights about the layer from XML node.
void Forward(Tensor_t &input, bool applyDropout=true) override
Computes activation of the layer for the given input.
const TDescriptors * GetDescriptors() const
virtual ~TMaxPoolLayer()
Destructor.
size_t GetStrideCols() const
size_t GetFilterDepth() const
Getters.
const Tensor_t & GetOutput() const
const Tensor_t & GetActivationGradients() const
size_t GetInputHeight() const
VGeneralLayer(size_t BatchSize, size_t InputDepth, size_t InputHeight, size_t InputWidth, size_t Depth, size_t Height, size_t Width, size_t WeightsNSlices, size_t WeightsNRows, size_t WeightsNCols, size_t BiasesNSlices, size_t BiasesNRows, size_t BiasesNCols, size_t OutputNSlices, size_t OutputNRows, size_t OutputNCols, EInitialization Init)
Constructor.
size_t GetInputWidth() const
XMLNodePointer_t NewChild(XMLNodePointer_t parent, XMLNsPointer_t ns, const char *name, const char *content=nullptr)
create new child element for parent node
XMLAttrPointer_t NewAttr(XMLNodePointer_t xmlnode, XMLNsPointer_t, const char *name, const char *value)
creates new attribute for xmlnode, namespaces are not supported for attributes
create variable transformations