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