How to fix ValueError: The model did not return a loss from the inputs?

Traceback:

File "c:\Users\chenp\Documents\ML\machineLearning.py", line 52, in <module>
    trainer.train()
  File "C:\Users\chenp\AppData\Local\Programs\Python\Python310\lib\site-packages\transformers\trainer.py", line 1859, in train
    return inner_training_loop(
  File "C:\Users\chenp\AppData\Local\Programs\Python\Python310\lib\site-packages\transformers\trainer.py", line 2203, in _inner_training_loop
    tr_loss_step = self.training_step(model, inputs)
  File "C:\Users\chenp\AppData\Local\Programs\Python\Python310\lib\site-packages\transformers\trainer.py", line 3138, in training_step
    loss = self.compute_loss(model, inputs)
  File "C:\Users\chenp\AppData\Local\Programs\Python\Python310\lib\site-packages\transformers\trainer.py", line 3179, in compute_loss
    raise ValueError(
ValueError: The model did not return a loss from the inputs, only the following keys: start_logits,end_logits. For reference, the inputs it received are input_ids,attention_mask.  
  0%|          | 0/9 [00:00<?, ?it/s]

From offending line:

trainer.train()

My code:

# https://www.mlexpert.io/blog/alpaca-fine-tuning
# https://wellsr.com/python/fine-tuning-huggingface-models-in-tensorflow-keras/
# https://learnopencv.com/fine-tuning-bert/
# https://medium.com/@karary/nlp-fine-tune-question-answering-model-%E5%AF%A6%E4%BD%9C-3-model-training-%E5%84%B2%E5%AD%98%E8%88%87-inference-13d2a5bf5c32
# https://medium.com/@anyuanay/fine-tuning-the-pre-trained-bert-model-in-hugging-face-for-question-answering-8edc76890ce0
import transformers as tf
import datasets as ds
import pandas as pd
import numpy as np
import torch
import json
 
############## Check if CUDA is enabled. ################
hasCUDA=torch.cuda.is_available()
print(f"CUDA Enabled? {hasCUDA}")
device="cuda" if hasCUDA else "cpu"      
 
############## Loading file and populating data ################
fileName="qna.json"
sampleDS=ds.load_dataset("json", data_files=fileName, split="train")


############## Model ##########################################
modelName="distilbert/distilbert-base-cased"     #or replace the model name with whatever you feel like.
# config=tf.AutoConfig.from_pretrained(modelName+"/config.json")
model=tf.AutoModelForQuestionAnswering.from_pretrained(modelName)
tokenizer=tf.AutoTokenizer.from_pretrained(modelName)

############## Encoding and Tokenizing #######################################
sampleDS=sampleDS.map(lambda batch: tokenizer(sampleDS["text"], truncation=True, padding='max_length', max_length=512), batched=True)
sampleDS.set_format("torch", columns=["input_ids", "attention_mask", "text"])
# sampleDS.rename_column("answer", "labels")
print(sampleDS)
############## Training #######################################
trnArgs=tf.TrainingArguments(
    output_dir="./",
    evaluation_strategy="epoch",
    save_strategy="epoch",
    learning_rate=2e-5,
    num_train_epochs=3,
    remove_unused_columns=True,
    fp16=True
)
 
trainer=tf.Trainer(
    model=model,
    args=trnArgs,
    train_dataset=sampleDS, 
    eval_dataset=sampleDS,
    tokenizer=tokenizer
)
trainer.train()

JSON file:

{"text": "Who wrote Charlie and the Chocolate Factory?", "label": "Roald Dahl"}
{"text": "Name a few ways to treat constipation naturally.", "label": "Exercise regularly, eat more fibers, and drink more water."}
{"text": "Where is the longest roller coaster located?", "label": "Nagashima, Japan. The name of the coaster is Steel Dragon 2000."}
{"text": "Who murdered JFK?", "label": "It is said to be Harvey Oswald."}
{"text": "What are the 11 herbs and spices that Colonel Sanders used in KFC?", "label": "Nobody knows, as it's a secret."}
{"text": "Who wrote Les Miserables?", "label": "Victor Hugo"}
{"text": "What is the Watergate Scandal?", "label": "The Watergate scandal was a significant political controversy in the United States during the presidency of Richard Nixon from 1972 to 1974, ultimately resulting in Nixon's resignation. It originated from attempts by the Nixon administration to conceal its involvement in the June 17, 1972, break-in at the Democratic National Committee headquarters located in the Watergate Office Building in Washington, D.C."}
{"text": "What is Obama's most famous quote?", "label": "'Yes we can!'"}
{"text": "Where did the 2008 Olympic take place?", "label": "Beijing"}
{"text": "Lentils and Chickpeas are what kind of food?", "label": "Beans"}
{"text": "Who was the disciple that Jesus loved?", "label": "John"}
{"text": "Why did the Boston Tea Party happen?", "label": "The colonists were unhappy with the tax and restrictions imposed by the British colonists."}
{"text": "What was the effect of the Boston Tea Party?", "label": "The British imposed a new Intolerable Act, and tensions between the colonies and the British escalated."}
{"text": "Who conquered the Aztec Empire?", "label": "Hernan Cortes"}
{"text": "What is the longest flight as of 2024?", "label": "Singapore to New York, operated by Singapore Airlines."}
{"text": "Name a few infamous Roman dictators.", "label": "Caligula, Nero, and Tiberius."}
{"text": "Where did the early Hungarians come from?", "label": "They originated from the Uralic region as nomads, and then migrated to Central Europe's Carpathian basin."}
{"text": "Where is the fastest roller coaster located?", "label": "Abu Dhabi, and the coaster is known as F1."}
{"text": "What are some popular painting in Uffizi Gallery?", "label": "The Birth of Venus, Madonna of the Goldfinch, and Judith and Holofernes."}
{"text": "Who wrote A Christmas Carol and Oliver Twist?", "label": "Charles Dickens"}

Any suggestions to fix this? I’ve been pulling my hair for days over this error.

Hey!

For a Question Answering model you have to prepare inputs with “start_positions” and “end_positions” so that the model knows the correct answer and calculcates loss.

See here for an example preprocessing on SQuAD dataset.