pytorch使用自己的数据

首先,pytorch是分下面几个部分的
在这里插入图片描述

  • 第一个为核心部分
  • 第二个为处理语音的部分
  • 第三个为文本部分
  • 第四个为视觉部分
  • 下面的比较不常用

数据及加载数据

当我们需要用自己的数据去完成一些任务的时候,我们就需要定义自己的数据类

import torch
from torch.utils.data import Dataset
#首先要继承Dataset
class MyData(Dataset):
	#参数为数据路径和标签路径	
	def __init__(self,root_dir,label_dir):
	     self.root_dir=root_dir
	     self.label_dir=label_dir
	     self.path=os.path.join(self.root_dir,self.label_dir)
	     self.img_path=os.listdir(self.path)
	 #按照索引去获取某个数据和标签 比如第1张图片和它的标签 实现这个方法才能完成后面对应的操作
	 def __getitem__(self, idx):
	     img_name=self.img_path[idx]
	     img_item_path=os.path.join(self.root_dir,self.label_dir,img_name)
	     img=Image.open(img_item_path)
	     label=self.label_dir
	     return img,label
	
	 def __len__(self):
	     return len(self.img_path)

接着是关于pytorch中视觉的一点方法

torchvision.transforms

transforms 里面有很多对图片数据的处理
首先它们都是类:

  • Totensor
    Convert a PIL Image or numpy.ndarray to tensor. This transform does not support torchscript.
  • ToPILImage
  • Normalize:归一化
  • resize
  • Compose Compose()中的参数需要是一个列表 Python中,列表的表示形式为[数据1,数据2,.….] 在Compose中,数据需要是 transforms类型,所以得到,Compose([transforms参数1 transforms参数2.….])
  • 等一些列

具体例子

#Totensor
#转成tensor PIL image----->tensor
img_path='D:\PycharmProjects\pytorch_learn\hymenoptera_data\\train\\ants\\6240338_93729615ec.jpg'
img=Image.open(img_path)
tran_tensor=transforms.ToTensor()
img_tensor=tran_tensor(img)
#Normalize
#归一化 tensor---tensor
#第一个参数为均值 第二个参数为标准差
#然后按照归一化的公式对每个通道进行计算  input[channel] = (input[channel] - mean[channel]) / std[channel] 根据相应通道的均值标准差进行计算
#值得注意的是,在使用该语句之前,需使用transforms.ToTensor()函数将输入数据的形状由H、W、C变为C、H、W,然后将所有像素值除以255,即将数据归一化到[0,1]。
#其中mean和std分别通过(0.5,0.5,0.5)和(0.5,0.5,0.5)进行指定。原来的0-1最小值0则变成(0-0.5)/0.5=-1,而最大值1则变成(1-0.5)/0.5=1
tran_norm=transforms.Normalize([0.5,0.5,0.5],[0.5,0.5,0.5])
img_norm=tran_norm(img_tensor)
#resize
#resize PIL image---->PIL image
# print(img.size)
trans_resize=transforms.Resize((512,512))
img_re=trans_resize(img)
# print(type(img_re))
# print(img_re.size)
#Compose 其实就是把多个步骤整合到一起 让图片经过里面的一些列操作
trans_resize_2=transforms.Resize(512)
#这里就是先resize 然后转成tensor
img_compose=transforms.Compose([trans_resize_2,tran_tensor])
img_resize_2=img_compose(img)
# print(type(img_resize_2))
#torchvision中数据集的使用
dataset_tranforms=transforms.Compose([transforms.ToTensor()])
#root存放的目录 train是否为训练集 download是否下载 transform对数据进行一些列操作
train_set=torchvision.datasets.CIFAR10(root='./dataset',train=True,download=True,transform=dataset_tranforms)
test_set=torchvision.datasets.CIFAR10(root='./dataset',train=False,download=True,transform=dataset_tranforms)
#这个数据集的用法跟我们自定义数据集是一样的 直接按索引拿到对应图片数据与标签
print(test_set[0])

dataloader

#dataloader 把dataset比喻成一打扑克 那dataloader就是手 里面的方法比如batch_size一次拿多少到我们的手上 shuffle就是打乱牌 跟洗牌一样 transform的目的是把它转成tensor
test_set=torchvision.datasets.MNIST(root='./root',train=False,transform=dataset_tranforms,download=True)
test_loader=DataLoader(test_set,batch_size=4,shuffle=True,num_workers=0,drop_last=False)
for data in test_loader:
    img,target=data
    print(img.shape)
    print(target)
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值