Scikit 学习 train_test_split 到 Pytorch Dataloader
Scikit learn train_test_split into Pytorch Dataloader
我有一个用于二进制 classification 的数据集,其 PNG 标题如下面的附件所示,标题中的第一个 0 或 1 决定了它的 class。它们在一个名为“annotation_class”的文件夹中,我有一个小脚本来分隔它们:
import cv2,glob
import numpy as np
from sklearn.model_selection import train_test_split
filelist = glob.glob('annotation_class'+'/*.png')
size_row, size_col = 256, 256
X,y = [],[]
for name in filelist:
img = cv2.imread(name)
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
img = cv2.resize(img,(size_row, size_col))
X.append(img)
y.append(int(name.split('\')[-1].split('_')[1]))
x_train, x_test, y_train, y_test= train_test_split(X, y, test_size=0.2, train_size=0.8, random_state=4)
returns都是列表。我正在为这个项目使用 Pytorch,并想制作一个自定义数据集以使用 Dataloader,但我不确定在使用 train_test_split
之后如何最好地包含这些。我应该完全放弃它并使用其他东西吗?我想最终得到两个用于训练和测试的 DataLoader。
您不必重写。您可以在 PyTorch 数据集中重用核心数据加载逻辑
import cv2,glob
import numpy as np
from sklearn.model_selection import train_test_split
from torch.utils.data import Dataset
class MyCoolDataset(Dataset):
def __init__(self, dir, train=True):
filelist = glob.glob(dir + '/*.png')
...
# all your data loading logic using cv2, glob ..
x_train, x_test, y_train, y_test = train_test_split(X, y, test_size=0.2, train_size=0.8, random_state=4)
# two modes - train and test
if train:
self.x_data, self.y_data = x_train, y_train
else:
self.x_data, self.y_data = x_test, y_test
def __getitem__(self, i):
return self.x_data[i], self.y_data[i]
然后照常使用DataLoader
dl = DataLoader(MyCoolDataset(...), batch_size=...)
for X, Y in dl:
pass
我有一个用于二进制 classification 的数据集,其 PNG 标题如下面的附件所示,标题中的第一个 0 或 1 决定了它的 class。它们在一个名为“annotation_class”的文件夹中,我有一个小脚本来分隔它们:
import cv2,glob
import numpy as np
from sklearn.model_selection import train_test_split
filelist = glob.glob('annotation_class'+'/*.png')
size_row, size_col = 256, 256
X,y = [],[]
for name in filelist:
img = cv2.imread(name)
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
img = cv2.resize(img,(size_row, size_col))
X.append(img)
y.append(int(name.split('\')[-1].split('_')[1]))
x_train, x_test, y_train, y_test= train_test_split(X, y, test_size=0.2, train_size=0.8, random_state=4)
returns都是列表。我正在为这个项目使用 Pytorch,并想制作一个自定义数据集以使用 Dataloader,但我不确定在使用 train_test_split
之后如何最好地包含这些。我应该完全放弃它并使用其他东西吗?我想最终得到两个用于训练和测试的 DataLoader。
您不必重写。您可以在 PyTorch 数据集中重用核心数据加载逻辑
import cv2,glob
import numpy as np
from sklearn.model_selection import train_test_split
from torch.utils.data import Dataset
class MyCoolDataset(Dataset):
def __init__(self, dir, train=True):
filelist = glob.glob(dir + '/*.png')
...
# all your data loading logic using cv2, glob ..
x_train, x_test, y_train, y_test = train_test_split(X, y, test_size=0.2, train_size=0.8, random_state=4)
# two modes - train and test
if train:
self.x_data, self.y_data = x_train, y_train
else:
self.x_data, self.y_data = x_test, y_test
def __getitem__(self, i):
return self.x_data[i], self.y_data[i]
然后照常使用DataLoader
dl = DataLoader(MyCoolDataset(...), batch_size=...)
for X, Y in dl:
pass