class_docstr: Add Gaussian Blur to a 4D tensors
  This layer takes a 4D tensor of {N, C, H, W} as input.
  The Gaussian blur will be performed in given channel number (C) splitly.
class_docstr_tok: ["Add","Gaussian","Blur","to","a","4D","tensors","This","layer","takes","a","4D","tensor","of","{","N",",","C",",","H",",","W","}","as","input",".","The","Gaussian","blur","will","be","performed","in","given","channel","number","(","C",")","splitly","."]
docstr: Args:
      channels (int): Channel for input tensor
      kernel_size (int): Size of the kernel used in blurring
docstr_tok: ["Args",":","channels","(","int",")",":","Channel","for","input","tensor","kernel_size","(","int",")",":","Size","of","the","kernel","used","in","blurring"]
code: def __init__(self, channels, kernel_size):
      """
      Args:
          channels (int): Channel for input tensor
          kernel_size (int): Size of the kernel used in blurring
      """
  
      super(GaussianBlurLayer, self).__init__()
      self.channels = channels
      self.kernel_size = kernel_size
      assert self.kernel_size % 2 != 0
  
      self.op = nn.Sequential(
          nn.Pad2D(int(self.kernel_size / 2), mode="reflect"),
          nn.Conv2D(
              channels,
              channels,
              self.kernel_size,
              stride=1,
              padding=0,
              bias_attr=False,
              groups=channels,
          ),
      )
  
      self._init_kernel()
      self.op[1].weight.stop_gradient = True
  
imports: from collections import defaultdict
  import paddle
  import paddle.nn
  import paddle.nn.functional
  import numpy
  import scipy
  import paddleseg
  from paddleseg.models import layers, losses
  from paddleseg import utils
  from paddleseg.cvlibs import manager, param_init
label_desc: Use image node_id 1 to create a new GaussianBlurLayer object from inherited base classes: nn with example: obj = GaussianBlurLayer(channels, kernel_size)