繁体   English   中英

使用带有变形金刚拥抱面的权重

[英]Using weights with transformers huggingface

我遇到了这个使用 Longformer 执行文本分类的教程 我遇到了这两个链接—— 一个两个讨论在数据不平衡时使用 class 权重。

# instantiate the trainer class and check for available devices
trainer = Trainer(
    model=model,
    args=training_args,
    compute_metrics=compute_metrics,
    train_dataset=train_data,
    eval_dataset=test_data
)
device = 'cuda' if torch.cuda.is_available() else 'cpu'
device

我不确定如何修改上面的代码以包含 class 权重,如下所示(从上面的最后一个链接复制的代码)

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

有人可以澄清如何组合以上两个块吗?

您现在可以简单地拥有一个 CustomTrainer,而不是实例化Trainer CustomTrainer 这意味着,而不是写

trainer = Trainer(...)

你只需写

trainer = CustomTrainer(...)

由于您从Trainer class 继承了所有功能和默认行为,因此唯一的区别是自定义compute_loss() function。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM