I’m trying to train a custom model using the Trainer class, but I’m receiving the following error:
TypeError: forward() got an unexpected keyword argument 'labels'
Below is a minimal example of my implementation:
import torch
import torch.nn as nn
from datasets import Dataset
from transformers import Trainer, TrainingArguments
class MLP(nn.Module):
    def __init__(self, d_in, d_out):
        super(MLP, self).__init__()
        self.fc1 = nn.Linear(d_in, d_in)
        self.activation = nn.ReLU()
        self.fc2 = nn.Linear(d_in, d_out)
        self.criterion = nn.CrossEntropyLoss()
    def forward(self, x, y):
        x = self.fc1(x)
        x = self.activation(x)
        logits = self.fc2(x)
        loss = self.criterion(logits, y)
        return {'loss': loss, 'logits': logits}
if __name__ == "__main__":
    # device = torch.device('hpu')
    device = 'cpu'
    n_classes = 3
    bs = 10
    n_features = 20
    training_args = TrainingArguments(
            output_dir='./checkpoint',
            num_train_epochs=3,
            per_device_train_batch_size=1,
            per_device_eval_batch_size=1,
            report_to='none',
            save_strategy='no',
            remove_unused_columns=False
        )
    
    model = MLP(n_features, n_classes)
    x  = torch.randn(bs, n_features)
    y = torch.arange(0, bs)[..., None]
    val_dataset = train_dataset = Dataset.from_dict({'input_ids': x, 'labels': y})
    trainer = Trainer(
            model=model,
            args=training_args,
            train_dataset=train_dataset,
            eval_dataset=val_dataset
        )
    trainer.train()
I’m not sure what I’m doing wrong. I believe that I’m meeting all of the requirements described here.