一、torch.utils.data模块
torch.utils.data模块包含一些常用的数据预处理的操作,主要用于数据的读取、切分、准备。
1、回归数据准备
加载数据–>将数据集转化为32位浮点型–>将numpy数组转化为张量–>数据加载器,将训练数据进行批量处理
#回归数据准备
import torch
import torch.utils.data as Data
from sklearn.datasets import load_boston,load_iris
import numpy as np
boston_X,boston_y=load_boston(return_X_y=True)
print("boston_X.dtype:",boston_X.dtype)
print("boston_y.dtype:",boston_y.dtype)
train_xt=torch.from_numpy(boston_X.astype(np.float32))
train_yt=torch.from_numpy(boston_y.astype(np.float32))
print("train_xt.dtype:",train_xt.dtype)
print("train_yt.dtype:",train_yt.dtype)
train_data=Data.TensorDataset(train_xt,train_yt)
print(train_data)
#定义一个数据加载器,将训练数据集进行批量处理
train_loader=Data.DataLoader(
dataset=train_data,#使用的数据集
batch_size=64,#批处理的样本大小
shuffle=True,#每次迭代前打乱数据
num_workers=0,#使用两个进程修改为1 但这里不行 因为是cpu
)
#检查训练数据集的一个batch的样本的维度是否正确
for step,(b_x,b_y) in enumerate(train_loader):
if step>0:
break
print("b_x.shape:",b_x.shape)
print("b_y.shape:",b_y.shape)
print("b_x.dtype:",b_x.dtype)
print("b_y.dtype:",b_y.dtype)
2、分类数据准备
#分类数据准备
import torch
import torch.utils.data as Data
from sklearn.datasets import load_boston,load_iris
import numpy as np
iris_X,iris_y=load_iris(return_X_y=True)
print("boston_X.dtype:",iris_X.dtype)
print("boston_y.dtype:",iris_y.dtype)
train_xt=torch.from_numpy(iris_X.astype(np.float32))
train_yt=torch.from_numpy(iris_y.astype(np.int64))#使用PyTorch定义网络模型时,对于分类问题,默认的预测变量是64位有符号整型数据
print("train_xt.dtype:",train_xt.dtype)
print("train_yt.dtype:",train_yt.dtype)
train_data=Data.TensorDataset(train_xt,train_yt)
print(train_data)
#定义一个数据加载器,将训练数据集进行批量处理
train_loader=Data.DataLoader(
dataset=train_data,#使用的数据集
batch_size=10,#批处理的样本大小
shuffle=True,#每次迭代前打乱数据
num_workers=0,#使用两个进程修改为1 但这里不行 因为是cpu
)
#检查训练数据集的一个batch的样本的维度是否正确
for step,(b_x,b_y) in enumerate(train_loader):
if step>0:
break
print("b_x.shape:",b_x.shape)
print("b_y.shape:",b_y.shape)
print("b_x.dtype:",b_x.dtype)
print("b_y.dtype:",b_y.dtype)
3、图像数据准备
#图像数据准备
import torch
import torch.utils.data as Data
from torchvision.datasets import FashionMNIST
import torchvision.transforms as transforms
from torchvision.datasets import ImageFolder#定义一个数据加载器从文件夹中读取数据
train_data=FashionMNIST(
root="./data/FashionMNIST",
train=True,
transform=transforms.ToTensor(),
download=False
)
train_loader=Data.DataLoader(
dataset=train_data,
batch_size=64,
shuffle=True,
num_workers=0,
)
print("train_loader的batch数量为:",len(train_loader))
import torch
import torch.utils.data as Data
from torchvision.datasets import FashionMNIST
import torchvision.transforms as transforms
from torchvision.datasets import ImageFolder#定义一个数据加载器从文件夹中读取数据
train_data_transforms=transforms.Compose([
transforms.RandomResizedCrop(224),#随机长宽比裁剪为224x224
transforms.RandomHorizontalFlip(),#依概率p=0.5水平翻转
transforms.ToTensor(),#转化为张量并归一化至[0,1]区间
#图像标准化处理
transforms.Normalize([0.845,0.456,0.406],[0.229,0.224,0.225])
])
#读取图像
train_data_dir="Data/image/"
train_data=ImageFolder(train_data_dir,transform=train_data_transforms)
train_data_loader=Data.DataLoader(train_data,batch_size=1,shuffle=True,num_workers=0)
print("数据集的label:",train_data.targets)
for step,(b_x,b_y) in enumerate(train_data_loader):
if step>0:
break
print(b_x.shape)
print(b_y.shape)
print("图像的取值范围为:",b_x.min(),"~",b_x.max())