PyTorch学习笔记(二)工具使用

 三、Dataset数据集的使用

加载数据

如何使用Dataset类

打开pycharm

代码实战

四、Tensorboard和Transform的使用

1.Tensorboard的使用(一)

add_scalar()的使用:

add_scalar()函数的用法:

运行

安装tensorboard,两种方法

点击链接,打开tensorboard

如果标题不变,数值改变,运行出现图像过拟合现象,解决办法:把log里的文件删掉,重新运行。

2.Tensorboard的使用(二)

add_image()的使用(常用来观察训练结果)

from torch.utils.tensorboard import SummaryWriter
import numpy as np
from PIL import Image

# add_image()方法的用法
writer = SummaryWriter("logs")
image_path = "data/train/ants_image/6240329_72c01e663e.jpg"
img_PIL = Image.open(image_path)
# 把图片从PIL类型转为numpy类型
img_array = np.array(img_PIL)
print(type(img_array))
print(img_array.shape)

# 图片形状默认是HWC(高度 宽度 通道)展示,如果是其他,需要写上dataformat=...
writer.add_image("train",img_array,1,dataformats='HWC')


# add_scalar()方法的用法
# y = x
for i in range(100):
    writer.add_scalar("y = 2x",3*i,i)

writer.close()

注:

3.Transform的使用(一)

transform是一个python文件,相当于工具箱。里面有很多类class(工具)

(1)先定义自己的工具

(2)放进输入,得到输出

4.Transform的使用(二)

ToTenSor类:把 ``PIL Image`` 格式类型or ``numpy.ndarray`` 类型to tensor类型.

注:numpy类型的图片怎么获得:用OpenCV

安装OpenCV:

具体代码:

from torch.utils.tensorboard import SummaryWriter
from torchvision import transforms
from PIL import Image

#python的用法 -》 tensor数据类型
#通过 transform.ToTensor去看两个问题

#绝对路径 D:\others\code\Deep_learning\data\train\ants_image\0013035.jpg
#相对路径 data/train/ants_image/0013035.jpg
img_path = "data/train/ants_image/0013035.jpg"
img = Image.open(img_path)

# 1、transforms该如何使用(python)
tensor_trans = transforms.ToTensor()#创建totensor对象实例
tensor_img = tensor_trans(img)
print(tensor_img)

# 2、tensor :一个数据类型,张量,也就是矩阵。包装了神经网络所需的参数。

# 3、结合tensorboard的使用
writer = SummaryWriter("logs")
writer.add_image("Tensor_img", tensor_img)

writer.close()

运行结果:

5.常见的Transform(一)

__call__()函数:

class Person:
    def __call__(self, name):
        print(name)
    def hello(self,name):
        print(name)

person = Person()
person("zhangsan")
#如果定义了内置call函数,就可以用“对象(参数)”的方式调用call,让对象像函数一样使用
person.hello("lisi")

Normalize类:(归一化)

from PIL import Image
from torch.utils.tensorboard import SummaryWriter
from torchvision import transforms

#ToTensor
img = Image.open("images/pytorch.png")
trans_totensor = transforms.ToTensor()
img_tensor = trans_totensor(img)

writer = SummaryWriter("logs")
writer.add_image("ToTensor",img_tensor)

#Normalize
# print(img_tensor[0][0][0])#输出一开始图片第0层第0行第0列的像素值
trans_norm = transforms.Normalize([1,3,5],[0.5,0.5,0.5])#[1,3,5]是对每个信道给的均值
img_norm = trans_norm(img_tensor)
# print(img_norm[0][0][0])
writer.add_image("Normalize",img_norm,1)

writer.close()

输入是tensor类型,归一化:

output[channel] = (input[channel] - mean[channel]) / std[channel]

6.常见的Transform(二)

Resize类:输入是image的PIL类型,输出也是PIL

#Resize
print(img.size)
trans_resize = transforms.Resize((512,512))
img_resize = trans_resize(img)
print(img_resize)#输出的图片还是PIL类型
# 转为totensor类型
trans_totensor = transforms.ToTensor()
img_resize = trans_totensor(img_resize)
# 写入tensorboard
writer = SummaryWriter("logs")
writer.add_image("Resize",img_resize,0)

Compose类:compose()中的参数需要时一个列表,python中,列表的表示形式是[数据1,数据2,数据3...],在compose中,数据需要是transform类型,所以得到compose([transform参数1,transform2,...])

Randomcrop类:输入是image的PIL类型,输出也是PIL。随机裁剪。

# RandomCrop
trans_random = transforms.RandomCrop(300,400)
trans_compose_2 = transforms.Compose([trans_random,trans_totensor])
#输入的类型是trans_random的输入类型,trans_random的输出类型是tran_totensor的输入类型
for i in range(10):
    img_crop = trans_compose_2(img)
    writer.add_image("RandomCropHW",img_crop,i)

总结:

五、torchvision中的数据集使用

在科研中标准的数据集如何下载、使用:

1、torchvision中dataset的使用

import torchvision

#下载数据集
#root:相对路径下会自动创建dataset文件夹,并把数据保存进去
train_set = torchvision.datasets.CIFAR10(root = "./dataset",train=True,download=True)

test_set = torchvision.datasets.CIFAR10(root = "./dataset",train=False,download=True)

print(test_set[0])#第一个数值是图片,第二个数值是target target就是对应的是哪个class(此处是真实的类)
print(test_set.classes)

img,target = test_set[0]
print(img)
print(target)
print(test_set.classes[target])
img.show()

root参数:是指下载后保存到本地的位置。

train参数:True的话就是创建的数据集是一个训练集,False的话就是一个测试集。

transform参数:想对数据集中的所有数据的变化。

target transform参数:对target的transform。

download参数:True的话就会从网上自动下载数据集,False的话就不会下载。

运行python文件,即可下载数据集,若下载慢的话,可用迅雷下载:

和transform、tensboard连用

import torchvision
dataset_transform = torchvision.transforms.Compose([
    torchvision.transforms.ToTensor()
])
#加了transform参数
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("logs")

for i in range(10):
    img,target = test_set[i]
    writer.add_image("test_set",img,i)

writer.close()

六、Dataloader的使用

import torchvision
from torch.utils.data import DataLoader
from torch.utils.tensorboard import SummaryWriter

test_data = torchvision.datasets.CIFAR10("./dataset",train=False,transform=torchvision.transforms.ToTensor())
test_loader = DataLoader(dataset=test_data,batch_size=64,shuffle=False,num_workers=0,drop_last=True)

#测试数据集中第一张图片及target
img,target = test_data[0]
print(img.shape)
print(target)

writer=SummaryWriter("dataloader")

for epoch in range(2):#验证shuffle
    step = 0
    for data in test_loader:
        imgs,targets = data
        # print(imgs.shape)
        # print(targets)
        writer.add_images("Epoch:{}".format(epoch),imgs,step)
        step = step+1
writer.close()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值