code: def conv2d(
      _input,
      out_features,
      kernel_size,
      strides=1,
      padding="SAME",
      param_initializer=None,
  ):
      if kernel_size == 1:
          padding = "VALID"
  
      in_features = int(_input.get_shape()[-1])
      if not param_initializer:
          param_initializer = {}
      kernel = BasicModel.weight_variable(
          [kernel_size, kernel_size, in_features, out_features],
          name="kernel",
          initializer=param_initializer.get(
              "kernel", tf.contrib.layers.variance_scaling_initializer()
          ),
      )
      output = tf.nn.conv2d(
          _input, kernel, [1, strides, strides, 1], padding
      )
      return output
  
imports: import os
  import shutil
  import tensorflow
  import numpy
  import time
  from datetime import timedelta
  import json
  import pickle
label_desc: Use image node_id 21 for calling the BasicModel obj's underlying member method code with example usage: obj.conv2d(_input, out_features, kernel_size, strides, padding, param_initializer) and returns: output