首先,最重要的一点,所有的数据(不管是表格、图像、文本)都要转化成张量。
经典数据集
这里的经典数据集是指可以直接用pytorch中的torchvision下载和直接使用的数据集,如MNIST,CIFAR。这些数据这些数据都可以直接用torch.utils.data.DataLoader加载。
1 2 3 4 5 6 7 8 9 10
| import torch import torchvision from torch.utils import data from torchvision import transforms
trans = transforms.ToTensor() mnist_train = torchvision.datasets.FashionMNIST(root='./data', train=True,transform=trans,download=False)
train_load = data.DataLoader(mnist_train,batch_size=16,shuffle=True)
|
表格数据
表格数据一般是csv格式,在导入时用pandas中的函数处理。一般会取其中某几列为特征,某一列为标签。
1 2 3 4
| import pandas as pd df = pd.read_csv(path) features = df.drop(['A1','A2'],axis=1) labels = df.loc[:,'A3']
|
用sklearn中的preprocessing.scale可以将特征归一化,结果会返回一个numpy的数组。经过一些实践发现,有时候归一化反而会导致负提升,所以并不是所有数据都要归一化,具体问题具体分析。
1 2
| from sklearn import preprocessing features = preprocessing.scale(features)
|
之后将Dateframe或者numpy数组转为张量。
1 2
| features_tensor = torch.from_numpy(features).float() labels_tensor = torch.tensor(labels.values,dtype=torch.long)
|
将两个张量features_tensor和lables_tensor合并为数据集dataset,并划分为训练集和测试集。
1 2 3 4
| from torch.utils.data import TensorDateset,random_split
dataset = TensorDataset(features_tensor,labels_tensor) train_set,test_set = random_split(dataset,[train_size,test_size])
|
到这一步,自建的数据集和经典数据集就没太大差别了,之后创建数据加载器加载小批量数据。
1 2
| from torch.utils.data import DataLoader train_load = DataLoader(train_set,batch_size=2^n,shuffle=True)
|
其中,batch_size一般设为2的n次方大小(充分利用GPU),shuffle为是否随机打乱顺序。
图像数据
一般我们需要把图像数据都放进一个文件夹中,并在程序中打开文件夹导入数据。假如数据的总目录是./data,在该目录下有两个文件夹,分别打包了训练集和测试集,./data/train和./data/test。假如这是一个二分类任务,在训练集文件夹中,又有两个文件夹,分别是两类图像,./data/train/data1和./data/train/data2。进入每一类文件夹后,再列出每个图像文件名,将其导入程序。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| import os from PIL import Image import torchvision.transforms as transforms
transform = transforms.Compose([transforms.ToTensor()])
imgs_list = [] labels_list = []
train_path = './data/train' file = os.listdir(train_path)
path = train_path+'/'
for i in file:
imgs_path = path + i for j in imgs_path: imgs_file = imgs_path + '/' + j img = Image.open(imgs_file) img = img.resize((width,height),Image.NEAREST) img_tensor = transform(img) imgs_list.append(img_tensor) labels_list.append(torch.tensor(labels))
|
这样可以得到两个列表,一个装着图片张量,一个装着标签张量。再将两个列表转为张量。
1 2
| imgs_tensor = torch.tensor(imgs_list) labels_tensor = torch.tensor(labels_list)
|
到这里得到的两个张量相当于表格数据中的特征张量和标签张量,之后用与构建表格数据集相同的方法打包成数据集。
1 2
| from torch.utils.data import TensorDateset dataset = TensorDataset(imgs_tensor,labels_tensor)
|
文本数据处理方法
不懂哦,太难了。 直接用Huggingface的工具吧。