code: def _train_model(self, train_set, train_labels,
                       validation_set, validation_labels):
          
          shuff = list(zip(train_set, train_labels))
  
          pbar = tqdm(range(self.num_epochs))
          for i in pbar:
  
              np.random.shuffle(list(shuff))
              batches = [_ for _ in utilities.gen_batches(
                  shuff, self.batch_size)]
  
              for batch in batches:
                  x_batch, y_batch = zip(*batch)
                  self.tf_session.run(
                      self.train_step,
                      feed_dict={self.input_data: x_batch,
                                 self.input_labels: y_batch,
                                 self.keep_prob: self.dropout})
  
              if validation_set is not None:
                  feed = {self.input_data: validation_set,
                          self.input_labels: validation_labels,
                          self.keep_prob: 1}
                  acc = tf_utils.run_summaries(
                      self.tf_session, self.tf_merged_summaries,
                      self.tf_summary_writer, i, feed, self.accuracy)
                  pbar.set_description("Accuracy: %s" % (acc))
docs: Train the model.
  
          :param train_set: training set
          :param train_labels: training labels
          :param validation_set: validation set
          :param validation_labels: validation labels
          :return: self