# Transformers replacing loss function

**URL:** </static-proxy?url=https%3A%2F%2Fdiscuss.huggingface.co%2Ft%2Ftransformers-replacing-loss-function%2F16106%3E%5C
**Category:** 🤗Transformers\
**Created:** [March 26, 2022, 3:04am UTC](/static-proxy?url=https%3A%2F%2Fdiscuss.huggingface.co%2Ft%2Ftransformers-replacing-loss-function%2F16106 "2022-03-26T03:04:06Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![nitempe](https://avatars.discourse-cdn.com/v4/letter/n/54ee81/32.png) [@nitempe](/static-proxy?url=https%3A%2F%2Fdiscuss.huggingface.co%2Fu%2Fnitempe)%5C
**Post date:** [March 26, 2022, 3:04am UTC](/static-proxy?url=https%3A%2F%2Fdiscuss.huggingface.co%2Ft%2Ftransformers-replacing-loss-function%2F16106%2F1 "2022-03-26T03:04:06Z")

</div>

[This page](https://huggingface.co/docs/transformers/main_classes/trainer) shows how to use a custom trainer

```auto
from torch import nn
from transformers import Trainer

class CustomTrainer(Trainer):
    def compute_loss(self, model, inputs, return_outputs=False):
        labels = inputs.get("labels")
        # forward pass
        outputs = model(**inputs)
        logits = outputs.get("logits")
        # compute custom loss (suppose one has 3 labels with different weights)
        loss_fct = nn.CrossEntropyLoss(weight=torch.tensor([1.0, 2.0, 3.0]))
        loss = loss_fct(logits.view(-1, self.model.config.num_labels), labels.view(-1))
        return (loss, outputs) if return_outputs else loss

```

My questions -

1. if `logits = outputs.get("logits")` returns logits then why outputs are always in range 0 to 1? Am I missing something?
2. I have class imbalance problem and I would like to use [bce with logits](https://pytorch.org/docs/stable/generated/torch.nn.BCEWithLogitsLoss.html#torch.nn.BCEWithLogitsLoss) loss? That loss requires input to be logits (values before converting to probability) . what should I do to use that loss?
