文章目录
一、pytorch的两大法宝函数
dir():打开,看见
help():说明书
help(pytorch.3.a)
输出:将此扳手放在特定地方,然后拧动
总结:
dir()函数,能让我们知道工具箱以及工具箱中的分隔区有什么东西。
help()函数,能让我们知道每个工具是如何使用的,工具的使用方法。
二、Jupyter的使用及运行的对比
//pytorch是创建的环境
activate pytorch
jupyter notebook
shift+回车:运行并进入下一行
对比:
-
python文件:块是所有行的代码。
优点:通用,传播方便,适用于大型项目。
缺点:需要从头运行。 -
python控制台:以每一行为运行。
也可以以任意行为块运行:shift+回车。
优点:显示每个变量的属性,可用于调试。
缺点:不利于代码阅读及修改。 -
jupyter:以任意行为块运行,代码阅读性高。
优点:利于代码阅读及修改。
缺点:环境需要配置。
三、pytorch加载数据
Dataset:提供一种方式去获取数据及其label
DataLoader:为网络提供不同的数据形式
1.Dataset
代码如下(示例):
from torch.utils.data import Dataset
import os
from PIL import Image
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)
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)
root_dir="dataset/train"
ants_label_dir="ants"
bees_label_dir="bees"
ants_dataset=Mydata(root_dir,ants_label_dir)
bees_dataset=Mydata(root_dir,bees_label_dir)
2.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=True, num_workers=0, drop_last=True)
img, target = test_data[0]
print(img.shape)
print(target)
writer = SummaryWriter("dataloader")
for epoch in range(2):
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()
四、TensorBoard()
提示:打开方式:在终端输入tensorboard --logdir=logs
代码如下(示例):
from torch.utils.tensorboard import SummaryWriter
import numpy as np
from PIL import Image
writer = SummaryWriter("logs")
image_path="E:\\20220828162137.jpg"
img=Image.open(image_path)
img_array=np.array(img)
print(type(img_array))
print(img_array.shape)
writer.add_image("certificate",img_array,1, dataformats="HWC")
for i in range(100):
writer.add_scalar("y=2x",2*i,i)
writer.close()
五、Transforms()
图片格式:
- PIL:Image.open()
- tensor:ToTensor()
- narrays:cv.imread()
代码如下(示例):
from PIL import Image
from torch.utils.tensorboard import SummaryWriter
from torchvision import transforms
img_path="dataset/train/ants_image/1.jpg"
img=Image.open(img_path)
writer=SummaryWriter("logs")
tensor_trans=transforms.ToTensor()
tensor_img=tensor_trans(img)
writer.add_image("Tensor_img",tensor_img)
writer.close()
call的用法
compose的用法
compose建立的类对象以括号的方式进行调用
ToTensor的用法
TensorBoard()只能用Tensor的数据类型
Normalize的用法
归一化,(输入值-均值)/标准差
Resize的用法
输入是PIL类型,给定是序列,进行尺寸调整;只给定一个数,最小边匹配number,即等比缩放。
RandomCrop的用法
随机裁剪
from PIL import Image
from torch.utils.tensorboard import SummaryWriter
from torchvision import transforms
writer = SummaryWriter("logs")
img = Image.open("1.jpg")
print(img)
# ToTensor
trans_totensor = transforms.ToTensor()
img_tensor = trans_totensor(img)
writer.add_image("ToTensor", img_tensor)
# Normalize
print(img_tensor[0][0][0])
#均值,标准差,num和channel相同
trans_norm = transforms.Normalize([6, 3, 2], [9, 3, 5])
img_norm = trans_norm(img_tensor)
print(img_norm[0][0][0])
writer.add_image("Normalize", img_norm, 2)
# Resize
print(img.size,)
trans_resize = transforms.Resize((512, 512))
# img -> PIL -> Resize -> img_resize PIL
img_resize = trans_resize(img)
# img_resize PIL -> totensor -> img_resize tensor
img_resize = trans_totensor(img_resize)
writer.add_image("Resize", img_resize, 0)
print(img_resize, '55555555555555555555555555')
# Compose - resize - 2
trans_resize_2 = transforms.Resize(512)
trans_compose = transforms.Compose([
trans_resize_2, trans_totensor
])
img_resize_2 = trans_compose(img)
writer.add_image("Resize", img_resize_2, 1)
# RandomCrop
trans_random = transforms.RandomCrop(512)
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)
writer.close()