Add adaptive avg pooling

This commit is contained in:
2024-05-30 17:17:31 +02:00
parent 9faf20876a
commit 8168f02f58
5 changed files with 143 additions and 8 deletions

View File

@@ -68,4 +68,24 @@ int AvgPooling2d::getInputSize() {
shape2d AvgPooling2d::getOutputDims() {
return outputSize;
}
AdaptiveAvgPooling2d::AdaptiveAvgPooling2d(shape2d inputShape, int nChannels, shape2d outputShape, ActivationType activationType)
: AvgPooling2d(inputShape, nChannels, {1, 1}, {1, 1}, {0, 0}, activationType) {
stride = {inputShape.first / outputShape.first, inputShape.second / outputShape.second};
poolingSize = {
inputShape.first - (outputShape.first - 1) * stride.first,
inputShape.second - (outputShape.second - 1) * stride.second
};
padding = {
(poolingSize.first - 1) / 2,
(poolingSize.second - 1) / 2
};
outputSize = outputShape;
activation = new Activation(activationType, outputSize.first * outputSize.second * nChannels);
cudaFree(d_output);
cudaMalloc((void**)&d_output, sizeof(float) * outputSize.first * outputSize.second * nChannels);
}