pytorch学习笔记

Pytorch学习笔记

1.数据读取:

主要涉及两个类:Dataset、Dataloader
Dataset主要是提供一种方式去获取数据及其label。
功能:
1.如何获取每一个数据及其label
2.告诉我们总共有多少个数据

from torch.utils.data import Dataset

自己的数据类需要继承Dataset,作为它的子类。
需要写__getitem__方法和__len__方法

Dataloader主要是对数据进行打包,为后面的网络提供不同的数据形式。

1.Tensorboard的使用

from torch.utils.tensorboard import SummaryWriter

writer = SummaryWriter(“logs”) #创建事件文件夹实例,在项目文件夹中
writer.add_scalar(tag,global_step,scalar_value) 

tag(string):图像的标题
global_step(int):对应图像的x轴
scalar_value(float or string/blobname):对应y轴

打开创建的事件文件:
tensorboard --logdir=logs --port=6007
–logdir:事件文件对应所在的文件夹
–port:设置端口,不设置的话参数默认为6006

writer.add_image(tag,img_tensor,global_step,dataformats)

tag(string):图像的标题
img_tensor(torch.Tensor, numpy.array, or string/blobname):图像数据
global_step(int):图像记录值的步数
dataformats:默认为’CHW’,表示“通道”“高度”“宽度”

可以用opencv读取图像,得到numpy类型 或用numpy 把PIL类型转换为numpy类型:

img_PIL = Image.open(image_path)
img_array = np.array(img)
writer.add_image(“test”, img_array, 1, ’HWC’)

2.图像变换,torchvision中transforms的使用

from torch vision import transforms

transform的结构及用法:
transforms.py:(工具箱)
ToTensor、resize等(工具,不同的class)

ToTensor:把一个PIL Image类型或numpy.ndarray类型转换为tensor类型

opencv-python:

import cv2
cv_img = cv2.imread(img_path)
#此处得到的cv_img为np.ndarray格式

PIL.Image.open(image_path)得到PIL格式

常见的transforms:

ToTensor():把PIL类型或ndarray类型转换为tensor类型

ToPILImage():把tensor或ndarray类型转换为PIL类型

Compose():把几个操作合并执行。参数需要是一个列表,数据需要是transforms类型,即Compose([transforms参数1, transforms参数2, …])

Normalize():归一化,(input的值-均值)/标准差

trans_norm = transforms.Normalize([0.5, 0.5, 0.5], [0.5, 0.5 ,0.5]),输入为均值和标准差
img_norm = trans_norm(img_tensor)

Resize():把输入的PIL Image 缩放为一个给定的尺寸,return一个PIL Image。可以输入序列(h,w)或者一个int值,参数为int值时把图片h,w中小的一边变为参数值size,大的一边变为size*大/小。

trans_resize = transforms.Resize((512, 512))
img_resize = trans_resize(img)
img_resize = trans_totensor(img_resize)

Compose - Resize - 2

trans_resize_2 = transforms.Resize(512)
trans_compose = transforms.Compose([trans_resize_2, trans_totensor])
img_resize_2 = trans_compose(img)

RandomCrop():随机裁剪,输入一个序列或一个int值,裁剪为(h,w)大小或(size,size)大小

trans_random = transforms.RandomCrop((500, 1000))
trans_compose_2 = transforms.Compose([trans_random, trans_totensor])
for i in range(10):
	img_crop = trans_compose_2(img)
	writer.add_image(“RandomCrop”, img_crop, i)

总结使用方法:
1.关注输入和输出类型
2.多看官方文档
3.关注方法需要什么参数
4.不知道返回值类型的时候可以print(type())或打断点

3.torchvision中的数据集使用:torchvision.datasets

参数:
root(string):存放数据集的文件夹
train(bool,optional):为True时,创建训练集,否则创建测试集
download(bool,optional):为真时从网上把数据集下载到本地,如果已经下载过不会重复下载
transform(callable,optional):一个输入PIL Image,输出一个转换了格式的文件的函数

样例:

import torch vision
from torch.utils.tensorboard import SummaryWriter

dataset_transform = torchvision.transforms.Compose([
	torchvision.transforms.ToTensor()
])
train_set = torchvision.datasets.CIFAR10(root=./dataset”, train=True, transform=dataset_transform, download=True)
test_set = torchvision.datasets.CIFAR10(root=./dataset’, train=False, transform=dataset_transform, download=True)

writer = SummaryWriter(“p10”)
for i in range(10):
	img, target = test_set[i]
	writer.add_image(“test_set”, img, i)

writer.close()

4.DataLoader的使用:

可以把数据从数据集加载到神经网络中
常用参数:
dataset(Dataset):需要加载的数据集
batch_size(int,optional):每次从数据集中取多少样本,默认为1
shuffle(bool,optional):每次迭代训练时是否打乱数据的顺序,默认为False,一般喜欢设置为True
num_workers(int,optional):多少个子进程进行加载,默认为0,只用主进程进行加载
drop_last(bool,optional):如果数据集除不尽,是否舍去剩下的采样,默认为False(不舍去)。例如有60000个样本的数据集,每次取7个。

示例:

import torchvision
from torch.utils.data import DataLoader

test_data = torchvision.datasets.CIFAR10(./dataset’, train=False, transform=torchvision.transforms.ToTensor())

test_loader = DataLoader(dataset=test_data, batch_size=64, shuffle=True, num_workers=0, drop_last=False)

#测试数据集中第一张图片及其target
img, target = test_data[0]

writer = SummaryWriter(‘’dataloader)
step = 0
#读取test_loader中加载的数据,每个data包括了64个数据
for data in test_loader:
	imgs, targets = data
	writer.add_images(‘test_data’, imgs, step)
	step = step + 1

writer.close()
	

你可能感兴趣的:(深度学习,python,pytorch,学习,计算机视觉,python,深度学习)