feat : support for conv3D forward
Context
issue : #38 (closed), aidge#252 (closed)
Added :
- Conv3D
- ConvTranspose3D
- Pad3D
- PaddedConv3D
- PaddedConvTranspose3D
Enhancements
Conv1D
& Conv2D
backward functions have been optimized : indexing is now done by only incrementing the index counters without using multiplication.
Before
for (DimSize_t kX = 0; kX < kDim[0]; ++kX) {
kOffsets[2] = kX * kStrides[2] + kOffsets[1];
iDilKernelOffsets[0] = kX * dilation[0] * iStrides[2];
// DOING STUFF ...........
}
After
iDilKernelOffsets[0] = 0;
kOffsets[2] = kOffsets[1];
for (DimSize_t kX = 0; kX < kDims[0]; ++kX,
kOffsets[2] += kStrides[2],
iDilKernelOffsets[0] += dilation[0] *
iStrides[2]) {
// DOING STUFF ...........
}
NOTE : This implies a bit of unconventionnal over-crowding the for loops. That is usually written as :
for (DimSize_t kX = 0; kX < kDims[0]; ++kX) {
// DOING STUFF ...........
kOffsets[2] += kStrides[2];
iDilKernelOffsets[0] += dilation[0] * iStrides[2];
}
but since the the //DOING STUFF.......
usually contains 3+ nested loops, this would quickly be un-readable. Hence I chose to use the 1st "overcrowded for loop" syntax.
Edited by Grégoire Kubler
Merge request reports
Activity
Filter activity
Please register or sign in to reply