如果我們使用scikit-learn庫,可以使用如下方法劃分訓(xùn)練集和測試集:
from sklearn.model_selection import train_test_split
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.2)
如果我們不使用該庫,在pytorch中還有一種可以劃分訓(xùn)練接和測試集的方法。如下:
import numpy as np
from torch.utils.data import DataLoader, SubsetRandomSampler
# 首先產(chǎn)生數(shù)據(jù)索引的亂序排列
shuffled_indices = np.random.permutation(len(data))
train_idx = shuffled_indices[:int(0.8*len(data))]
val_idx = shulled_indices[int(0.8*len(data)):]
train_loader = DataLoader(data, batch_size = 32, drop_last = True, sampler = SubserRandomSampler(train_idx))
val_loader = DataLoader(data, batch_size = 32, drop_last=False, sampler=SubsetRandomSampler(val_idx))
Pytorch中也有一個類似于Numpy中random.permutation的函數(shù):torch.randperm。
如果我們并不想使用所有的數(shù)據(jù)進行訓(xùn)練,需要從中隨機挑選一部分,比如從中挑選1000個樣本進行訓(xùn)練,則可以使用如下方法:
import random
train_idx = random.sample(len(data), 1000)
train_loader = DataLoader(data, batch_size = 32, drop_last = True, sampler = SubserRandomSampler(train_idx))
這里的SuberRandomSampler是一種子集隨機采樣方式,傳入的是data的隨機索引。更多的sampler使用方法可以參考docs