Apprenez à effectuer une contre-validation lors de l'utilisation de Dataset avec Pytorch.
Vous pouvez utiliser torch.utils.data.dataset.Subset pour diviser un Dataset en spécifiant un index. Combinez cela avec le scikit-learn sklearn.model_selection.
train_test_split
Utilisez sklearn.model_selection.train_test_split pour diviser l'index en train_index et valid_index, et utilisez Subset pour diviser le jeu de données.
from torch.utils.data import Dataset, DataLoader
from torch.utils.data.dataset import Subset
from sklearn.model_selection import train_test_split
dataset = get_dataset()
train_index, valid_index = train_test_split(range(len(dataset)), test_size=0.3)
batch_size = 16
train_dataset = Subset(dataset, train_index)
train_dataloader = DataLoader(train_dataset, batch_size, shuffle=True)
valid_dataset   = Subset(dataset, valid_index)
valid_dataloader = DataLoader(valid_dataset, batch_size, shuffle=False)
#Code d'apprentissage ici
Utilisez sklearn.model_selection.KFold pour diviser l'index en train_index et valid_index, et utilisez Subset pour diviser le jeu de données.
from torch.utils.data import Dataset, DataLoader
from torch.utils.data.dataset import Subset
from sklearn.model_selection import KFold
dataset = get_dataset()
batch_size = 16
kf = KFold(n_splits=3)
for _fold, (train_index, test_index) in enumerate(kf.split(X)):
    train_dataset = Subset(dataset, train_index)
    train_dataloader = DataLoader(train_dataset, batch_size, shuffle=True)
    valid_dataset   = Subset(dataset, valid_index)
    valid_dataloader = DataLoader(valid_dataset, batch_size, shuffle=False)
    #Code d'apprentissage ici
S'il s'agit d'un Dataset de classification de classe, vous devriez être capable d'obtenir la valeur de y en faisant dataset [:] [1], donc vous devriez être capable de faire aussi Stratified KFold.
Recommended Posts