          """ Return the inputs for the model """
          logger.debug("Getting inputs")
          inputs = [Input(shape=self.input_shape, name="face_in")]
          output_network = [network for network in self.networks.values() if network.is_output][0]
          if "mask_out" in output_network.output_names:
              mask_idx = output_network.output_names.index("mask_out")
              mask_shape = output_network.output_shapes[mask_idx]
              inputs.append(Input(shape=mask_shape[1:], name="mask_in"))
          logger.debug("Got inputs: %s", inputs)
          return inputs
  
      def build_autoencoders(self, inputs):
 
</s> remove             batch = self.compile_mask(batch)
 </s> add             # Add mask to inputs
            mask = batch[-1]
            batch = [[feed, mask], batch] </s> remove         return tuple(out[0])
 </s> add         return [tuple(shape) for shape in out]

    @property
    def output_shape(self):
        """ The output shape of the model (shape of largest face output) """
        return self.output_shapes[self.largest_face_index]

    @property
    def largest_face_index(self):
        """ Return the index from model.outputs of the largest face
            Required for multi-output model prediction. The largest face
            is assumed to be the final output
        """
        sizes = [shape[1] for shape in self.output_shapes if shape[2] == 3]
        if not sizes:
            return None
        max_face = max(sizes)
        retval = [idx for idx, shape in enumerate(self.output_shapes)
                  if shape[1] == max_face and shape[2] == 3][0]
        logger.debug(retval)
        return retval

    @property
    def largest_mask_index(self):
        """ Return the index from model.outputs of the largest mask
            Required for multi-output model prediction. The largest face
            is assumed to be the final output
        """
        sizes = [shape[1] for shape in self.output_shapes if shape[2] == 1]
        if not sizes:
            return None
        max_mask = max(sizes)
        retval = [idx for idx, shape in enumerate(self.output_shapes)
                  if shape[1] == max_mask and shape[2] == 1][0]
        logger.debug(retval)
        return retval </s> remove         logger.debug(output_names)
 </s> add         logger.debug("Overridden output_names: %s", output_names) </s> remove         for loss_key in self.display_item.loss_keys:
 </s> add         display_tabs = sorted(self.display_item.loss_keys)
        if any(key.startswith("total") for key in display_tabs):
            total_idx = [idx for idx, key in enumerate(display_tabs) if key.startswith("total")][0]
            display_tabs.insert(0, display_tabs.pop(total_idx))
        for loss_key in display_tabs:
        mask_idx = [idx for idx, name in enumerate(output_network.output_names)
                    if name.startswith("mask")]
        if mask_idx:
            mask_shape = output_network.output_shapes[mask_idx[0]]
          """ Return the inputs for the model """
          logger.debug("Getting inputs")
          inputs = [Input(shape=self.input_shape, name="face_in")]
          output_network = [network for network in self.networks.values() if network.is_output][0]
        mask_idx = [idx for idx, name in enumerate(output_network.output_names)
                    if name.startswith("mask")]
        if mask_idx:
            mask_shape = output_network.output_shapes[mask_idx[0]]
        mask_idx = [idx for idx, name in enumerate(output_network.output_names)
                    if name.startswith("mask")]
        if mask_idx:
            mask_shape = output_network.output_shapes[mask_idx[0]]
        mask_idx = [idx for idx, name in enumerate(output_network.output_names)
                    if name.startswith("mask")]
        if mask_idx:
            mask_shape = output_network.output_shapes[mask_idx[0]]
              inputs.append(Input(shape=mask_shape[1:], name="mask_in"))
          logger.debug("Got inputs: %s", inputs)
          return inputs
  
      def build_autoencoders(self, inputs):
keep keep keep keep replace replace replace keep keep keep keep keep
 Training: Add Multi-Output Support

- Name output nodes of models
- Add support for multiple outputs in models and in training
- Update loss output format for cli and gui
- Sort graphs tabs on training
- Fix analysis graph for new loss names
- Multi output support in convert 
plugins/train/model/_base.py