English
DeepChoice / dataset /RandomSubsetBatchDataset.py
antoine.carreaud67
Clean and reorganize repository for public release
4a48212
Raw
History Blame Contribute Delete
1.33 kB
from pathlib import Path
import numpy as np
import torch
from torch.utils.data import Dataset
class RandomSubsetBatchDataset(Dataset):
def __init__(self, pt_files, subset_size, seed=42):
self.all_files = [str(Path(path)) for path in pt_files]
if not self.all_files:
raise ValueError("RandomSubsetBatchDataset requires at least one batch file")
self.subset_size = max(1, min(int(subset_size), len(self.all_files)))
self.seed = int(seed)
self.epoch = 0
self.active_files = self.all_files[: self.subset_size]
self.set_epoch(0)
def set_epoch(self, epoch):
self.epoch = int(epoch)
if self.subset_size >= len(self.all_files):
self.active_files = list(self.all_files)
return
rng = np.random.default_rng(self.seed + self.epoch)
indices = rng.choice(len(self.all_files), size=self.subset_size, replace=False)
self.active_files = [self.all_files[int(idx)] for idx in indices]
def __len__(self):
return len(self.active_files)
def __getitem__(self, index):
path = self.active_files[index]
sample = torch.load(path, weights_only=False)
sample["source_path"] = path
sample["tile_name"] = Path(path).stem.split("_batch_")[0]
return sample