How to create and use my own ModelOutput class with Trainer

Hello,

I’d like to use my own ModelOutput class, which has multiple losses as shown below.
loss is the total loss, and there are two losses that are weighted and added.

I want to show the two losses besides the total loss, but when I use Trainer with this original class, it failed during the evaluation step.

Is there anything I need to be aware of when defining this class?

definition of my own ModelOutput class

@dataclass
class SequenceClassifierMultiLossOutput(ModelOutput):
    """
    Base class for outputs of sentence classification models.

    Args:
        loss (:obj:`torch.FloatTensor` of shape :obj:`(1,)`, `optional`, returned when :obj:`labels` is provided):
            Classification (or regression if config.num_labels==1) loss.        
        logits (:obj:`torch.FloatTensor` of shape :obj:`(batch_size, config.num_labels)`):
            Classification (or regression if config.num_labels==1) scores (before SoftMax).
        hidden_states (:obj:`tuple(torch.FloatTensor)`, `optional`, returned when ``output_hidden_states=True`` is passed or when ``config.output_hidden_states=True``):
            Tuple of :obj:`torch.FloatTensor` (one for the output of the embeddings + one for the output of each layer)
            of shape :obj:`(batch_size, sequence_length, hidden_size)`.

            Hidden-states of the model at the output of each layer plus the initial embedding outputs.
        attentions (:obj:`tuple(torch.FloatTensor)`, `optional`, returned when ``output_attentions=True`` is passed or when ``config.output_attentions=True``):
            Tuple of :obj:`torch.FloatTensor` (one for each layer) of shape :obj:`(batch_size, num_heads,
            sequence_length, sequence_length)`.

            Attentions weights after the attention softmax, used to compute the weighted average in the self-attention
            heads.
        loss_one (:obj:`torch.FloatTensor` of shape :obj:`(1,)`, `optional`, returned when :obj:`labels` is provided):
            first (or regression if config.num_labels==1) loss.
        loss_two (:obj:`torch.FloatTensor` of shape :obj:`(1,)`, `optional`, returned when the second loss is used):
            second (or regression if config.num_labels==1) loss.
    """

    loss: Optional[torch.FloatTensor] = None
    logits: torch.FloatTensor = None
    hidden_states: Optional[Tuple[torch.FloatTensor]] = None
    attentions: Optional[Tuple[torch.FloatTensor]] = None
    loss_one: Optional[torch.FloatTensor] = None
    loss_two: Optional[torch.FloatTensor] = None

error message

  File "/****/.pyenv/versions/anaconda3-2020.07/lib/python3.8/site-packages/transformers/trainer.py", line 844, in train
    self._maybe_log_save_evaluate(tr_loss, model, trial, epoch)
  File "/****/.pyenv/versions/anaconda3-2020.07/lib/python3.8/site-packages/transformers/trainer.py", line 906, in _maybe_log_save_evaluate
    metrics = self.evaluate()
  File "/****/.pyenv/versions/anaconda3-2020.07/lib/python3.8/site-packages/transformers/trainer.py", line 1323, in evaluate
    output = self.prediction_loop(
  File "/****/.pyenv/versions/anaconda3-2020.07/lib/python3.8/site-packages/transformers/trainer.py", line 1447, in prediction_loop
    preds_host = logits if preds_host is None else nested_concat(preds_host, logits, padding_index=-100)
  File "/****/.pyenv/versions/anaconda3-2020.07/lib/python3.8/site-packages/transformers/trainer_pt_utils.py", line 84, in nested_concat
    return type(tensors)(nested_concat(t, n, padding_index=padding_index) for t, n in zip(tensors, new_tensors))
  File "/****/.pyenv/versions/anaconda3-2020.07/lib/python3.8/site-packages/transformers/trainer_pt_utils.py", line 84, in <genexpr>
    return type(tensors)(nested_concat(t, n, padding_index=padding_index) for t, n in zip(tensors, new_tensors))
  File "/****/.pyenv/versions/anaconda3-2020.07/lib/python3.8/site-packages/transformers/trainer_pt_utils.py", line 86, in nested_concat
    return torch_pad_and_concatenate(tensors, new_tensors, padding_index=padding_index)
  File "/****/.pyenv/versions/anaconda3-2020.07/lib/python3.8/site-packages/transformers/trainer_pt_utils.py", line 47, in torch_pad_and_concatenate
    if len(tensor1.shape) == 1 or tensor1.shape[1] == tensor2.shape[1]:
IndexError: tuple index out of range

Thank you in advance.