chainer.functions.local_convolution_2d

chainer.functions.local_convolution_2d(x, W, b=None, stride=1)[source]

Two-dimensional local convolution function.

Locally-connected function for 2D inputs. Works similarly to convolution_2d, except that weights are unshared, that is, a different set of filters is applied at each different patch of the input. It takes two or three variables: the input image x, the filter weight W, and optionally, the bias vector b.

Notation: here is a notation for dimensionalities.

  • \(n\) is the batch size.
  • \(c_I\) is the number of the input.
  • \(c_O\) is the number of output channels.
  • \(h\) and \(w\) are the height and width of the input image, respectively.
  • \(h_O\) and \(w_O\) are the height and width of the output image, respectively.
  • \(k_H\) and \(k_W\) are the height and width of the filters, respectively.
Parameters:
  • x (chainer.Variable or numpy.ndarray or cupy.ndarray) – Input variable of shape \((n, c_I, h, w)\).
  • W (Variable) – Weight variable of shape \((c_O, h_O, w_O, c_I, k_H, k_W)\).
  • b (Variable) – Bias variable of shape \((c_O,h_O,w_O)\) (optional).
  • stride (int or pair of ints) – Stride of filter applications. stride=s and stride=(s, s) are equivalent.
Returns:

Output variable. Its shape is \((n, c_I * c_O, h_O, w_O)\).

Return type:

Variable

Like Convolution2D, LocalConvolution2D function computes correlations between filters and patches of size \((k_H, k_W)\) in x. But unlike Convolution2D, LocalConvolution2D has a separate filter for each patch of the input

\((h_O, w_O)\) is determined by the equivalent equation of Convolution2D, without any padding

If the bias vector is given, then it is added to all spatial locations of the output of convolution.

Example

>>> x = np.random.uniform(0, 1, (2, 3, 7, 7))
>>> W = np.random.uniform(0, 1, (2, 5, 5, 3, 3, 3))
>>> b = np.random.uniform(0, 1, (2, 5, 5))
>>> y = F.local_convolution_2d(x, W, b)
>>> y.shape
(2, 2, 5, 5)