docstr: input_groups : list of strings, optional
      Specifies which named data groups (e.g. "ground_truth") enter which input
      data slot in your model.
docstr_tok: ["input_groups",":","list","of","strings",",","optional","Specifies","which","named","data","groups","(","e.g",".","``","ground_truth","''",")","enter","which","input","data","slot","in","your","model","."]
code: def train(
      self,
      training_data_collection,
      validation_data_collection=None,
      output_model_filepath=None,
      input_groups=None,
      training_batch_size=32,
      validation_batch_size=32,
      training_steps_per_epoch=None,
      validation_steps_per_epoch=None,
      initial_learning_rate=0.0001,
      learning_rate_drop=None,
      learning_rate_epochs=None,
      num_epochs=None,
      callbacks=["save_model", "log"],
      **kwargs,
  ):
      """
      input_groups : list of strings, optional
          Specifies which named data groups (e.g. "ground_truth") enter which input
          data slot in your model.
      """
  
      self.create_data_generators(
          training_data_collection,
          validation_data_collection,
          input_groups,
          training_batch_size,
          validation_batch_size,
          training_steps_per_epoch,
          validation_steps_per_epoch,
      )
  
      self.callbacks = get_callbacks(
          callbacks,
          output_model_filepath=output_model_filepath,
          data_collection=training_data_collection,
          model=self,
          batch_size=training_batch_size,
          backend="keras",
          **kwargs,
      )
  
      try:
          if validation_data_collection is None:
              self.model.fit_generator(
                  generator=self.training_data_generator,
                  steps_per_epoch=self.training_steps_per_epoch,
                  epochs=num_epochs,
                  callbacks=self.callbacks,
              )
          else:
              self.model.fit_generator(
                  generator=self.training_data_generator,
                  steps_per_epoch=self.training_steps_per_epoch,
                  epochs=num_epochs,
                  validation_data=self.validation_data_generator,
                  validation_steps=self.validation_steps_per_epoch,
                  callbacks=self.callbacks,
                  workers=0,
              )
      except KeyboardInterrupt:
          for callback in self.callbacks:
              callback.on_train_end()
      except:
          raise
  
      return
  
imports: from keras.engine import Input, Model
  from keras.layers import Activation, Lambda
  from keras.layers.merge import concatenate
  from keras.optimizers import Nadam, SGD, Adam, RMSprop, Adagrad, Adamax, Adadelta
  from keras import backend
  from deepneuro.models.cost_functions import dice_coef_loss, dice_coef
  from deepneuro.models.model import DeepNeuroModel
  from deepneuro.utilities.visualize import check_data
  from deepneuro.utilities.util import add_parameter
  from deepneuro.models.callbacks import get_callbacks
  from deepneuro.models.cost_functions import WeightedCategoricalCrossEntropy
label_desc: Use image node_id 2 for calling the KerasModel obj's underlying member method code with example usage: obj.train(training_data_collection, validation_data_collection, output_model_filepath, input_groups, training_batch_size, validation_batch_size, training_steps_per_epoch, validation_steps_per_epoch, initial_learning_rate, learning_rate_drop, learning_rate_epochs, num_epochs, callbacks) without return types