pytorch 图像数据数据预处理

  • torchvision中的datasets模块包含多种常用的分类数据集下载及导入函数,可以很方便地导入数据以及验证所建立的模型效果。
  • torchvision中的transforms模块可以针对每张图像进行预处理操作。
  • torchvision的datasets模块中包含有ImageFolder()函数,该函数可以读取文件夹中的图片数据

以下代码以实际的数据集为例,结合torchvision中的相关模块的使用,展示图像数据的预处理操作。一种是从torchvision中的datasets模块中导入数据并预处理,另一种是从文件夹中导入数据并进行预处理。

导包:

import torch
import torch.utils.data as Data
from torchvision.datasets import FashionMNIST
import torchvision.transforms as transforms
from torchvision.datasets import ImageFolder

一、从torchvision中的datasets模块中导入数据并预处理

import torch
import torch.utils.data as Data
from torchvision.datasets import FashionMNIST
import torchvision.transforms as transforms
from torchvision.datasets import ImageFolder


##使用FashionMNIST数据,准备训练数据集
train_data = FashionMNIST(
    root = "./data/FashionMNIST", ##数据的路径
    train = True, ##只使用训练数据集
    transform = transforms.ToTensor(),
    download = True 
)

##定义一个数据加载器
train_loader = Data.DataLoader(
    dataset = train_data,
    batch_size = 64,
    shuffle = True,
    num_workers = 2,  ##使用两个进程
)

##计算train_loader有多少个batch
print("train_loader的batch数量为:",len(train_loader))
# train_loader的batch数量为: 938



##对测试集进行处理
test_data = FashionMNIST(
    root = "./data/FashionMNIST",
    train = False, ##不使用训练数据集
    download = False
)

##为数据添加一个通道维度,并且取值范围缩放到0~1之间
test_data_x = test_data.data.type(torch.FloatTensor)/255.0
test_data_x = torch.unsqueeze(test_data_x,dim = 1)
test_data_y = test_data.targets ##测试集的标签
print("test_data_x.shape:",test_data_x.shape)
print("test_data_y.shape:",test_data_y.shape)
# test_data_x.shape: torch.Size([10000, 1, 28, 28])
# test_data_y.shape: torch.Size([10000])

二、从文件夹中导入数据并进行预处理

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),  ##随机长宽比裁剪为224*224
    transforms.RandomHorizontalFlip(), ##依概率p = 0.5水平翻转
    transforms.ToTensor(),  ##转化为张量并归一化至【0-1】
    transforms.Normalize([0.485,0.456,0.406],
                         [0.229,0.224,0.225])  ##图像标准化处理
])

##读取图像
train_data_dir = "/kaggle/input/jiangnan2020/train/"
train_data = ImageFolder(train_data_dir,transform = train_data_transforms)
train_data_loader = Data.DataLoader(train_data,batch_size=4,
                                   shuffle = True,num_workers = 1)
print("数据集的label:",train_data.targets)  ##因为只有一个文件夹,所以targets都是0啦
# 数据集的label: [0, 0, 0, .............]
            
            
##获得一个batch的数据
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())
# torch.Size([4, 3, 224, 224])
# torch.Size([4])
# 图像的取值范围为: tensor(-2.0665) ~ tensor(2.2489)

你可能感兴趣的:(pytorch,pytorch,机器学习,深度学习)