# Need help with gpt2 model

**URL:** </static-proxy?url=https%3A%2F%2Fdiscuss.huggingface.co%2Ft%2Fneed-help-with-gpt2-model%2F46160%3E%5C
**Category:** Beginners\
**Created:** [July 9, 2023, 11:14am UTC](/static-proxy?url=https%3A%2F%2Fdiscuss.huggingface.co%2Ft%2Fneed-help-with-gpt2-model%2F46160 "2023-07-09T11:14:55Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![tuti123](https://avatars.discourse-cdn.com/v4/letter/t/ce7236/32.png) [@tuti123](/static-proxy?url=https%3A%2F%2Fdiscuss.huggingface.co%2Fu%2Ftuti123)%5C
**Post date:** [July 9, 2023, 11:14am UTC](/static-proxy?url=https%3A%2F%2Fdiscuss.huggingface.co%2Ft%2Fneed-help-with-gpt2-model%2F46160%2F1 "2023-07-09T11:14:55Z")

</div>

I am finetuning gpt2 model to answer questions with given faq.json.  
Code -

import torch  
from torch.utils.data import Dataset, DataLoader  
from transformers import GPT2LMHeadModel, GPT2Tokenizer, GPT2Config

class FAQDataset(Dataset):  
def **init** (self, data\_file, tokenizer):  
self.tokenizer = tokenizer  
self.inputs =   
self.targets =

```
    with open(data_file, 'r') as file:
        lines = file.readlines()
        
        for i in range(0, len(lines)-1, 2):
            question = lines[i].strip()
            answer = lines[i+1].strip()
            self.inputs.append(question)
            self.targets.append(answer)

def __len__ (self):
    return len(self.inputs)

def __getitem__ (self, index):
    inputs = self.tokenizer.encode(self.inputs[index], add_special_tokens=True)
    targets = self.tokenizer.encode(self.targets[index], add_special_tokens=True)
    return torch.tensor(inputs), torch.tensor(targets)

```

# Load the GPT-2 tokenizer and model

tokenizer = GPT2Tokenizer.from\_pretrained(‘gpt2’)  
model = GPT2LMHeadModel.from\_pretrained(‘gpt2’)

# Load the training dataset

dataset = FAQDataset(‘faq.txt’, tokenizer)

# Define the training parameters

batch\_size = 4  
num\_epochs = 3  
learning\_rate = 1e-5

# Create the data loader

data\_loader = DataLoader(dataset, batch\_size=batch\_size, shuffle=True)

# Set the model in training mode

model.train()

# Define the optimizer and the loss function

optimizer = torch.optim.AdamW(model.parameters(), lr=learning\_rate)  
criterion = torch.nn.CrossEntropyLoss(ignore\_index=tokenizer.pad\_token\_id)

# Fine-tune the model

for epoch in range(num\_epochs):  
total\_loss = 0

```
for inputs, targets in data_loader:
    optimizer.zero_grad()

    # Forward pass
    outputs = model(inputs, labels=targets)
    loss = criterion(outputs.logits.view(-1, tokenizer.vocab_size), targets.view(-1))

    # Backward pass and optimization
    loss.backward()
    optimizer.step()

    total_loss += loss.item()

avg_loss = total_loss / len(data_loader)
print(f"Epoch {epoch+1}/{num_epochs}, Loss: {avg_loss}")

```

# Save the fine-tuned model

model.save\_pretrained(‘fine-tuned-gpt2’)  
tokenizer.save\_pretrained(‘fine-tuned-gpt2’)

**prompt** -

import torch  
from transformers import GPT2LMHeadModel, GPT2Tokenizer

# Load the fine-tuned model and tokenizer

model = GPT2LMHeadModel.from\_pretrained(‘fine-tuned-gpt2’)  
tokenizer = GPT2Tokenizer.from\_pretrained(‘fine-tuned-gpt2’)

# Set the model to evaluation mode

model.eval()

# User input

user\_question = “What is your refund policy?”

# Generate the answer using the fine-tuned model

input\_ids = tokenizer.encode(f"Q: {user\_question}\nA:", return\_tensors=‘pt’)  
output = model.generate(input\_ids, max\_length=100, num\_return\_sequences=1)  
generated\_answer = tokenizer.decode(output[:, input\_ids.shape[-1]:][0], skip\_special\_tokens=True)

print(generated\_answer)

Answer generated is !!! !!!

Any help please?
