code: def weight_variable(name, shape, trainable):
          
          w = tf.get_variable(name=name, shape=shape, initializer=tf.contrib.layers.variance_scaling_initializer(),
                              trainable=trainable)
          weights_norm = tf.reduce_sum(tf.nn.l2_loss(w),
                                       name=name + '_norm')  # Should user want to optimize weight decay
          tf.add_to_collection('weight_losses', weights_norm)
          return w
docs: :param name: string
          :param shape: 4D array
          :return: tf variable