如何将自定义数据集分为训练和测试数据集?

绝技:
import pandas as pd
import numpy as np
import cv2
from torch.utils.data.dataset import Dataset

class CustomDatasetFromCSV(Dataset):
    def __init__(self, csv_path, transform=None):
        self.data = pd.read_csv(csv_path)
        self.labels = pd.get_dummies(self.data['emotion']).as_matrix()
        self.height = 48
        self.width = 48
        self.transform = transform

    def __getitem__(self, index):
        pixels = self.data['pixels'].tolist()
        faces = []
        for pixel_sequence in pixels:
            face = [int(pixel) for pixel in pixel_sequence.split(' ')]
            # print(np.asarray(face).shape)
            face = np.asarray(face).reshape(self.width, self.height)
            face = cv2.resize(face.astype('uint8'), (self.width, self.height))
            faces.append(face.astype('float32'))
        faces = np.asarray(faces)
        faces = np.expand_dims(faces, -1)
        return faces, self.labels

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

通过使用其他存储库中的引用,我可以设法做到这一点。但是,我想将此数据集拆分为训练和测试。

在课堂上我该怎么做?还是我需要做一个单独的课堂来做到这一点?

本杰明普兰什:

使用Pytorch的SubsetRandomSampler

import torch
import numpy as np
from torchvision import datasets
from torchvision import transforms
from torch.utils.data.sampler import SubsetRandomSampler

class CustomDatasetFromCSV(Dataset):
    def __init__(self, csv_path, transform=None):
        self.data = pd.read_csv(csv_path)
        self.labels = pd.get_dummies(self.data['emotion']).as_matrix()
        self.height = 48
        self.width = 48
        self.transform = transform

    def __getitem__(self, index):
        # This method should return only 1 sample and label 
        # (according to "index"), not the whole dataset
        # So probably something like this for you:
        pixel_sequence = self.data['pixels'][index]
        face = [int(pixel) for pixel in pixel_sequence.split(' ')]
        face = np.asarray(face).reshape(self.width, self.height)
        face = cv2.resize(face.astype('uint8'), (self.width, self.height))
        label = self.labels[index]

        return face, label

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


dataset = CustomDatasetFromCSV(my_path)
batch_size = 16
validation_split = .2
shuffle_dataset = True
random_seed= 42

# Creating data indices for training and validation splits:
dataset_size = len(dataset)
indices = list(range(dataset_size))
split = int(np.floor(validation_split * dataset_size))
if shuffle_dataset :
    np.random.seed(random_seed)
    np.random.shuffle(indices)
train_indices, val_indices = indices[split:], indices[:split]

# Creating PT data samplers and loaders:
train_sampler = SubsetRandomSampler(train_indices)
valid_sampler = SubsetRandomSampler(val_indices)

train_loader = torch.utils.data.DataLoader(dataset, batch_size=batch_size, 
                                           sampler=train_sampler)
validation_loader = torch.utils.data.DataLoader(dataset, batch_size=batch_size,
                                                sampler=valid_sampler)

# Usage Example:
num_epochs = 10
for epoch in range(num_epochs):
    # Train:   
    for batch_index, (faces, labels) in enumerate(train_loader):
        # ...

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何将数据随机分为训练集和测试集?

如何将数据集分割/划分为训练和测试数据集,例如进行交叉验证?

如何将数据集划分为类之间的训练和验证集保持率?

机器学习-将数据分为测试和训练集

如何将自定义Java类转换为Spark数据集

将数据集分为训练和测试数据,保持比例

如何将训练数据集分为训练,验证和测试数据集?

如何根据中心划分训练/测试数据集?

如何将数据集(csv)分为训练和测试数据

将数据分为训练和测试集:如何确保所有因素都包括在训练集中?

如何正确地将不平衡数据集拆分为训练和测试集?

如何使用torchvision.datasets.Imagefolder将数据分为训练集和测试集?

将图像数据集拆分为训练测试数据集

如何在TensorFlow中使用我自己的数据将图像分为测试集和训练集

如何以相同格式组合训练和测试数据集

使用PyTorch和TorchVision对自定义数据集进行训练有效测试拆分

使用runif将数据集分为训练和测试集

将自定义PyTorch数据集拆分为训练加载器和验证加载器:即使拆分了数据集,两者的长度也相同?

在Julia中将数据集拆分为训练和测试

SSAS-分类-如何将数据划分为:训练集-验证集-测试集

如何将训练数据集上的线性回归结果应用到测试数据集上?

Excel - 如何将数据拆分为平均分布的训练集和测试集

当数据为每组行而不是每组一行时,如何将数据集拆分/划分为训练集和测试集

如何将数据集划分为 R 中所有可能的测试和训练组合?

将自定义类添加到预先训练的数据集

相同的数据分为训练集、开发集和测试集

Orange:如何确保将相同的 PCA 应用于训练和测试数据集?

如何训练从 kaggle 下载的图像的 amd 测试数据集

训练和测试数据集