class_docstr: Spatial depth-wise 2D convolution module, including bias.
  
  This acts as a light wrapper around the TensorFlow ops
  `tf.nn.depthwise_conv2d`, abstracting away variable creation and sharing.
code: def _initialize(self, inputs: tf.Tensor):
      self.input_channels = inputs.shape[self._channel_index]
      if self.input_channels is None:
          raise ValueError(
              "The number of input channels must be known."
          )
      dtype = inputs.dtype
  
      weight_shape = utils.replicate(
          self.kernel_shape, 2, "kernel_shape"
      )
      weight_shape = weight_shape + (
          self.input_channels,
          self.channel_multiplier,
      )
      if self.w_init is None:
          # See https://arxiv.org/abs/1502.03167v3.
          fan_in_shape = weight_shape[:2]
          stddev = 1 / np.sqrt(np.prod(fan_in_shape))
          self.w_init = initializers.TruncatedNormal(stddev=stddev)
      self.w = tf.Variable(self.w_init(weight_shape, dtype), name="w")
  
      output_channels = self.input_channels * self.channel_multiplier
      if self.with_bias:
          self.b = tf.Variable(
              self.b_init((output_channels,), dtype), name="b"
          )
  
file_path: sonnet/sonnet/src/depthwise_conv.py
imports: from typing import Optional, Sequence, Union
  import numpy
  from sonnet.src import base
  from sonnet.src import initializers
  from sonnet.src import once
  from sonnet.src import utils
  import tensorflow
label_desc: Use image node_id 3 for calling the DepthwiseConv2D obj's underlying member method code with example usage: obj._initialize(inputs) without return types