Anul 3 Semestrul 1

This commit is contained in:
2025-02-06 20:33:26 +02:00
parent 0b130ee18c
commit 184f3bd92e
313 changed files with 348499 additions and 0 deletions
@@ -0,0 +1,71 @@
from dotenv import load_dotenv
import argparse
from tqdm import tqdm
import torch
from torch.utils import data
from data_loader import DFGenerator, StoryPointDataset
from models import get_model_and_tokenizer
def parse_args() -> argparse.Namespace:
parser = argparse.ArgumentParser(description='Model evaluation details')
# Dataset details
parser.add_argument('--eval_split', type=float, default=0.2, help='Evaluation split')
parser.add_argument('--random_seed', type=int, default=42, help='Random seed')
parser.add_argument('--max_length', type=int, default=128, help='Maximum number of tokens in input sequence')
# Model details
parser.add_argument('--checkpoint', type=str, default=None, help='Checkpoint to evaluate')
return parser.parse_args()
class Evaluator():
def __init__(self, args):
self.device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
self.model, self.tokenizer = get_model_and_tokenizer(args.checkpoint)
self.model.to(self.device)
df_generator = DFGenerator(eval_split=args.eval_split, random_seed=args.random_seed)
_, val_df = df_generator.create_dataframes()
if val_df is None:
raise ValueError('No validation data available')
val_dataset = StoryPointDataset(val_df, self.tokenizer, max_length=args.max_length)
self.val_loader = data.DataLoader(val_dataset, batch_size=1)
def evaluate(self):
self.model.eval()
correct_predictions = 0
total_predictions = 0
for batch in tqdm(self.val_loader, desc=f'Validation'):
inputs = {k: v.to(self.model.device) for k, v in batch.items()}
with torch.no_grad():
outputs = self.model(**inputs)
_, predicted = torch.max(outputs.logits, 1)
correct_predictions += (predicted == batch['labels'].to(self.model.device)).sum().item()
total_predictions += len(batch['labels'])
accuracy = correct_predictions / total_predictions
validation_message = f'Validation Accuracy: {accuracy:.4f}'
print(validation_message)
if __name__ == '__main__':
load_dotenv()
args = parse_args()
evaluator = Evaluator(args)
evaluator.evaluate()