Код: Выделить всё
class CustomDataset(Dataset):
def __init__(self, root_dir, transform=None):
self.root_dir = root_dir
self.transform = transform
self.classes = os.listdir(root_dir)
self.image_paths = []
self.labels = []
for label, class_name in enumerate(self.classes):
class_dir = os.path.join(root_dir, class_name)
for img_path in glob.glob(os.path.join(class_dir, '*.png')) + \
glob.glob(os.path.join(class_dir, '*.jpg')) + \
glob.glob(os.path.join(class_dir, '*.jpeg')):
self.image_paths.append(img_path)
self.labels.append(label)
def __len__(self):
return len(self.image_paths)
def __getitem__(self, idx):
img_path = self.image_paths[idx]
image = Image.open(img_path).convert('RGB')
label = self.labels[idx]
if self.transform:
image = self.transform(image)
else:
image = transforms.ToTensor()(image) # Convert PIL image to tensor if no transform is provided
return image, label
Код: Выделить всё
class AugmentedDataset(Dataset):
def __init__(self, base_dataset, transforms_list):
self.base_dataset = base_dataset
self.transforms_list = transforms_list if isinstance(transforms_list, list) else [transforms_list]
def __len__(self):
return len(self.base_dataset) * len(self.transforms_list)
def __getitem__(self, idx):
base_idx = idx // len(self.transforms_list)
transform_idx = idx % len(self.transforms_list)
image, label = self.base_dataset[base_idx]
transform = self.transforms_list[transform_idx]
if transform:
image = transform(image)
return image, label
Код: Выделить всё
base_dataset = CustomDataset(train_dir, v2.Compose(basic_transformations))
train_size = int(0.8 * len(base_dataset))
val_size = len(base_dataset) - train_size
train_base_dataset, val_dataset = random_split(base_dataset, [train_size, val_size])
train_dataset = AugmentedDataset(train_base_dataset, augmentations)
val_dataset = AugmentedDataset(train_base_dataset, v2.Compose(final_transformation))
trainloader = DataLoader(train_dataset, batch_size=BATCH_SIZE, shuffle=True)
valloader = DataLoader(val_dataset, batch_size=BATCH_SIZE, shuffle=False)
- Почему это происходит с методом pytorchrandom_split?
- Каковы наилучшие методы обеспечения сбалансированного разделения по всем классам как в обучающем, так и в проверочном наборе?
- br />Есть ли какие-либо конкретные методы или библиотеки, которые я могу использовать для поддержания баланса классов во время разделения?
Подробнее здесь: https://stackoverflow.com/questions/788 ... orch-datas