How do I log prediction score into new dataframe?


Here is the ideal type.
I used stratified K fold and I don’t know how to put prediction data into a Dataframe

Here is the code

for fold, (train_index, val_index) in enumerate(Fold.split(folds, folds[‘label’])):
train_df = folds.loc[train_index].reset_index(drop=True)
val_df = folds.loc[val_index].reset_index(drop=True)
train_dataset = TrainDataset(train_df, transform = train_transform)
valid_dataset = TrainDataset(val_df, transform = valid_transform)
train_loader = DataLoader(train_dataset, batch_size=32, shuffle=True, num_workers=4, pin_memory=True)
valid_loader = DataLoader(valid_dataset, batch_size=32, shuffle=False, num_workers=4, pin_memory=True)

with torch.enable_grad():
    for epoch in range(epochs):
        model.to(device)
        model.train()
        train_loss = 0.0
        train_accuracy = 0.0
        loop1 = tqdm(train_loader)
        for image, label in loop1:
            image = image.to(device)
            label = label.to(device)
        
   
            preds = model(image)
            loss = criterion(preds, label)
        
         
            optimizer.zero_grad()
            loss.backward()
        
        
            optimizer.step()
        
            train_loss += loss.item()
            train_accuracy += get_score(label.cpu().detach().numpy(), preds.argmax(1).cpu().detach().numpy())
            loop1.set_description(f'EPOCH: {epoch+1}/{epochs} TRAIN')
            loop1.set_postfix(TRAIN_AUC = train_accuracy/len(train_loader) , TRAIN_LOSS = train_loss/len(train_loader))

        with torch.no_grad():
            valid_loss = 0.0
            num_corrects = 0.0
            valid_accuracy = 0.0
            preds = []
            model.eval()
            loop2 = tqdm(valid_loader)
            for x, y in loop2:
                x = x.to(device)
                y = y.to(device)
                output = model(x)
                loss = criterion(output, y)
                valid_loss += loss.item()
                
                predictions = output.argmax(1)
                preds.append(predictions.cpu().detach().numpy())
                valid_accuracy += get_score(y.cpu().detach().numpy(), output.argmax(1).cpu().detach().numpy())
                

                loop2.set_description(f'EPOCH: {epoch+1}/{epochs} VALID')
                loop2.set_postfix(VAL_AUC = valid_accuracy/len(valid_loader) , VAL_LOSS = valid_loss/len(valid_loader))