您的位置:首页 > 汽车 > 新车 > pytorch快速入门(一)—— 基本工具及平台介绍

pytorch快速入门(一)—— 基本工具及平台介绍

2024/11/20 15:32:55 来源:https://blog.csdn.net/m0_61766362/article/details/137887125  浏览:    关键词:pytorch快速入门(一)—— 基本工具及平台介绍

前言

        该pytorch学习笔记应该配合b站小土堆《pytorch深度学习快速入门教程》使用

        环境配置:Anaconda             Python编译器:pycharm、jupyter 

                 

  • 两大法宝函数

           dir():知道包中有什么东西(函数 / 属性...)

           help():查看函数的使用说明

1. Dataset类代码实战

from torch.utils.data import Dataset
from PIL import Image #PIL 图像处理第三方库pillow
import os# 创建类
class MyData(Dataset):# __init__ 创建对象时自动调用 用于初始化对象属性def __init__(self,label,path):   #实例方法,默认第一个参数self需要接收到一个实例self.label = labelself.path = path #私有属性公有化(路径)self.img_path = os.listdir(self.path) #获取所有列表地址# __getitem__ 对实例对象 根据index进行索引def __getitem__(self, idx):img_name = self.img_path[idx]img_item_path = os.path.join(self.path,img_name) #路径拼接img = Image.open(img_item_path) #获取对应图像信息label = self.labelreturn img,label# 返回列表长度def __len__(self):return len(self.img_path)# 创建实例
ants_dataset = MyData("ants",r"D:\python code\pythonProject\dataset\train\ants")
len(ants_dataset)
img,label = ants_dataset[5]
img.show()bees_dataset = MyData("bees",r"D:\python code\pythonProject\dataset\train\bees")# 拼接数据集
train_dataset = ants_dataset + bees_dataset
len(train_dataset)

 2.Tensorboard

       TensorBoard 是一组用于数据可视化的工具 

  • TensorBoard的使用

        主要是使用SummaryWriter类中的 .add_image(图片可视化) 以及 .add_scalar(数据可视化)方法,一般来说,只接受tensor或numpy类型的图像数据

from tensorboardX import SummaryWriter  #导入类########## .add_scalar数据可视化 ############
writer = SummaryWriter("logs") #创建实例 logs为文件名for i in range(100):writer.add_scalar("y=2x",2*i,i)writer.close()########### .add_image图像可视化  ###########writer = SummaryWriter("logs")writer.add_image(标题,tensor或numpy数据)writer.close()

3.Transforms

 3.1 Tensor数据类型的意义

        Tensor数据类型包装了 神经网络理论所需要的一些参数

 3.2 常见的transform工具

  • transform如何使用

        transform是一个工具箱,里面有很多 类(如ToTensor、resize),一般我们根据类去实例化出具体的对象,然后再利用__call__函数,将对象当作函数调用

    3.2.1 数据类型转换

             ToTensor:将numpy或PIL Image类型的图片 转化为 tensor类型 

             ToPILImage:将tensor或numpy数据类型 转化为 PIL Image类型

from torchvision import transforms
from PIL import Image
img_path = r"D:\python code\pythonProject\dataset\train\ants\0013035.jpg"
img = Image.open(img_path)
print(img)# 将PIL Image类型(图片)转化为tensor
tensor_trans = transforms.ToTensor() # 创建实例(工具)
tensor_img = tensor_trans(img)       # 利用call内置方法 像函数一样调用实例(使用工具)

   3.2.2  其他

  • 注意事项:1.关注输入输出类型       2.学会看官方文档(按住CTRL点相应函数)
方法transform工具说明input
归一化Normalize

对数据进行标准化处理        output = \frac{input - mean}{std}

实例化:mean std列表

调用:tensor类型

规格调整 Resize调整输入图片的规格(大小)

实例化:序列

调用:PIL类型

组合Compose

将多个transforms变换组合在一起,

并按照顺序执行

实例化:

含transform的list

随机裁剪RandomCrop

根据给定规格随机裁剪图片

实例化:序列

  • 代码示例
from PIL import Image
from torchvision import transforms
from tensorboardX import SummaryWriterwriter = SummaryWriter("logs")
img = Image.open(r"D:\python code\pythonProject\image\OIP-C.jpg")
print(img)# ToTensor
trans_tensor = transforms.ToTensor()
tensor_img = trans_tensor(img)writer.add_image("ToTensor",tensor_img) #用Tensorboard可视化# Normalize 归一化
print(tensor_img[0],[0],[0]) #归一化之前
trans_norm = transforms.Normalize([0.5,0.5,0.5],[0.5,0.5,0.5]) #图片为RGB三通道,所以三个均值,三个标准差
norm_img = trans_norm(tensor_img)
print(tensor_img[0],[0],[0]) #归一化之后writer.add_image("Normalize",norm_img) #用Tensorboard可视化# Resize 调整规格
print(img.size) #img为PIL数据类型
trans_resize = transforms.Resize((512,512))# 将size调整为512*512
resize_img = trans_resize(img) # resize_img为PIL数据类型
print(resize_img)
resize_img = trans_tensor(resize_img) # resize_img转换为tensor数据类型
writer.add_image("Resize",resize_img,0)# Compose 组合
trans_resize2 = transforms.Resize((256,1024)) #调整规格
trans_compose = transforms.Compose([trans_tensor,trans_resize2]) #先转换数据类型 再调整规格
compose_img = trans_compose(img) #调用实例
writer.add_image("Compose",compose_img,1)# RondomCrop 随机裁剪
trans_random = transforms.RandomCrop(100)
trans_compose2 = transforms.Compose([trans_random,trans_tensor])
for i in range(10):randomcrop_img = trans_compose2(img)writer.add_image("RandomCrop",randomcrop_img,i)writer.close()
#最后在下方终端输入 tensorboard --logdir=文件名(logs) 即可打开tensorboard

4.torchvision中的数据集

    torchvision专门用于处理图像,其主要包含三个部分:model包(提供了训练好的模型)、dataset包(提供大量数据集)、transform包(对Tensor或PIL image图像进行转换处理)

  • dataset中的内置数据集使用 —— 以CIFAR-10数据集为例

CIFAR-10数据集:

         由 10 个类的 60000 张 32x32 彩色图像组成,每个类有 6000 张图像。

         有 50000 张训练图像和 10000 张测试图像。

 注:图像.show()   只能对PIL图像使用,如果是含PIL和其它参数的元组,无法使用

  • 代码示例 

        在 torchvision.datasets.CIFAR10()的参数中可以直接选用设定好的transform工具,直接导入处理好的数据

import torchvision
from tensorboardX import SummaryWriter# 与transforms进行联动
dataset_transfrom = torchvision.transforms.Compose([torchvision.transforms.ToTensor(),torchvision.transforms.Resize(128)]) #先Tensor 后调整大小# 导入数据集 —— 训练集与测试集(注意后面的参数)
train_set = torchvision.datasets.CIFAR10(root=r"D:\python code\pythonProject\dataset",train = True,download=True,transform=dataset_transfrom)
test_set = torchvision.datasets.CIFAR10(root=r"D:\python code\pythonProject\dataset",train = False,download=True,transform=dataset_transfrom)writer = SummaryWriter("logs2")
for i in range(10):img,target = test_set[i] #等号后 为 含tensor图像信息和图像标签target的元组writer.add_image("torchvision",img,i)writer.close() #!!!不要忘记关闭读写

5.dataloader的使用

简介:

        Dataloader是一个数据读取机制,它由数据集(dataset)和采样器(sampler)两个模块组成。主要是根据sampler提供的索引在dataset中读取数据。

        Dataloader的主要目的是将数据分批读取计算,节省显存

  • 示例
import torchvision
from torch.utils.data import DataLoader
from tensorboardX import SummaryWriter#准备测试的数据集(主要是说明数据集的位置)
test_data = torchvision.datasets.CIFAR10(root=r"D:\python code\pythonProject\dataset",train=False,transform=torchvision.transforms.ToTensor())# batch_size:每次抽出多少样本     shuffle:是否打乱样本顺序
test_loader = DataLoader(dataset=test_data,batch_size=64,shuffle=True,num_workers=0)# 查看每次抽取出的样本
writer = SummaryWriter("dataloader")
step = 0
for data in test_loader:imgs,targets = datawriter.add_images("test_data",imgs,step)step = step + 1writer.close()
#最后在下方终端输入 tensorboard --logdir=文件名 即可打开tensorboard

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com