class_docstr: This is an implementation of WDGRL for video data.
code: def configure_optimizers(self):
      if self.image_modality in ["rgb", "flow"]:
          if self.rgb_feat is not None:
              nets = [self.rgb_feat, self.classifier]
          else:
              nets = [self.flow_feat, self.classifier]
      elif self.image_modality == "joint":
          nets = [self.rgb_feat, self.flow_feat, self.classifier]
      parameters = set()
  
      for net in nets:
          parameters |= set(net.parameters())
  
      if self._adapt_lr:
          (
              task_feat_optimizer,
              task_feat_sched,
          ) = self._configure_optimizer(parameters)
          (
              self.critic_opt,
              self.critic_sched,
          ) = self._configure_optimizer(
              self.domain_classifier.parameters()
          )
          self.critic_opt = self.critic_opt[0]
          self.critic_sched = self.critic_sched[0]
          return task_feat_optimizer, task_feat_sched
      else:
          task_feat_optimizer = self._configure_optimizer(parameters)
          self.critic_opt = self._configure_optimizer(
              self.domain_classifier.parameters()
          )
          self.critic_sched = None
          self.critic_opt = self.critic_opt[0]
      return task_feat_optimizer
  
imports: import torch
  import kale.predict.losses
  from kale.loaddata.video_access import get_image_modality
  from kale.pipeline.domain_adapter import BaseMMDLike, CDANTrainer, DANNTrainer, GradReverse, Method, set_requires_grad, WDGRLTrainer
label_desc: Use image node_id 4 for calling the WDGRLTrainerVideo obj's underlying member method code with example usage: obj.configure_optimizers() and returns: task_feat_optimizer, task_feat_optimizer,  task_feat_sched