Types
Conv2DAlgorithm = enum Im2ColGEMM, NNPackAuto
- Source Edit
Procs
proc conv2d[T](input, weight, bias: Tensor[T]; padding: Size2D = (0, 0); stride: Size2D = (1, 1); algorithm = Conv2DAlgorithm.Im2ColGEMM): Tensor[ T] {.inline.}
-
Computes a 2D convolution over input images. Intended to be used in 2d convolution forward pass. This applies a 2D cross-correlation, not to be confused with the mathematical convolution.
Input:
- ``input`` 4D Tensor batch of images of the size [N,C_in,H_in,W_in] - ``weight`` 4D Tensor convolving kernel weights of the size [C_out,C_in,kH,kW] - ``bias`` 3D Tensor bias of the size [C_out,1,1] or an empty tensor for no bias - ``padding`` Size2D tuple with height and width of the padding - ``stride`` Size2D tuple with height and width of the stride - ``algorithm`` algorithm to be used in the convolution
Returns:
- A 4D Tensor of sized [N,C_out,H_out,W_out], where H_out = (H_in + (2*padding.height) - kH) / stride.height + 1 W_out = (W_in + (2*padding.width) - kW) / stride.width + 1
Valid algorithms:
- Im2ColGEMM im2col + GEMM algorithm, this is the default
- NNPackAuto Use NNPack and let it auto detect the best algorithm
Future: bias will leverage the upcoming Optional type to be really optional.
Source Edit proc conv2d_backward[T](input, weight, bias: Tensor[T]; padding: Size2D; stride: Size2D; grad_output: Tensor[T]; grad_input, grad_weight, grad_bias: var Tensor[T]; algorithm = Conv2DAlgorithm.Im2ColGEMM)
-
Computes gradients of a 2D convolution. Intended to be used after conv2d to calculate gradients in backward pass.
Input:
- ``input`` 4D Tensor batch of images of the size [N,C_in,H_in,W_in] - ``weight`` 4D Tensor convolving kernel weights of the size [C_out,C_in,kH,kW] - ``bias`` 3D Tensor bias of the size [C_out,1,1] or an empty tensor for no bias - ``padding`` Size2D tuple with height and width of the padding - ``stride`` Size2D tuple with height and width of the stride - ``grad_output`` 4D tensor gradient of the next layer of the size [N,C_out,H_out,W_out] - ``grad_input`` tensor where the gradient w.r.t input will be written - ``grad_weight`` tensor where the gradient w.r.t weight will be written - ``grad_bias`` tensor where the gradient w.r.t bias will be written - ``algorithm`` algorithm to be used in the convolution
Valid algorithms:
- Im2ColGEMM im2col + GEMM algorithm, this is the default
- NNPackAuto Use NNPack and let it auto detect the best algorithm