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

前言

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

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

两大法宝函数

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

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

1. Dataset类代码实战

python 复制代码
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 = label
        self.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.label
        return 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类型的图像数据

python 复制代码
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类型

python 复制代码
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 | 对数据进行标准化处理 | 实例化:mean std列表 调用:tensor类型 |
| 规格调整 | Resize | 调整输入图片的规格(大小) | 实例化:序列 调用:PIL类型 |
| 组合 | Compose | 将多个transforms变换组合在一起, 并按照顺序执行 | 实例化: 含transform的list |
| 随机裁剪 | RandomCrop | 根据给定规格随机裁剪图片 | 实例化:序列 |

  • 代码示例
python 复制代码
from PIL import Image
from torchvision import transforms
from tensorboardX import SummaryWriter

writer = 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工具,直接导入处理好的数据

python 复制代码
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的主要目的是将数据分批读取计算,节省显存

  • 示例
python 复制代码
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 = data
    writer.add_images("test_data",imgs,step)
    step = step + 1

writer.close()
#最后在下方终端输入 tensorboard --logdir=文件名 即可打开tensorboard
相关推荐
Watermelo6172 分钟前
从DeepSeek大爆发看AI革命困局:大模型如何突破算力囚笼与信任危机?
人工智能·深度学习·神经网络·机器学习·ai·语言模型·自然语言处理
Donvink3 分钟前
【DeepSeek-R1背后的技术】系列九:MLA(Multi-Head Latent Attention,多头潜在注意力)
人工智能·深度学习·语言模型·transformer
计算机软件程序设计9 分钟前
深度学习在图像识别中的应用-以花卉分类系统为例
人工智能·深度学习·分类
終不似少年遊*4 小时前
词向量与词嵌入
人工智能·深度学习·nlp·机器翻译·词嵌入
夏莉莉iy6 小时前
[MDM 2024]Spatial-Temporal Large Language Model for Traffic Prediction
人工智能·笔记·深度学习·机器学习·语言模型·自然语言处理·transformer
pchmi7 小时前
CNN常用卷积核
深度学习·神经网络·机器学习·cnn·c#
deflag7 小时前
第P10周-Pytorch实现车牌号识别
人工智能·pytorch·yolo
pzx_0017 小时前
【机器学习】K折交叉验证(K-Fold Cross-Validation)
人工智能·深度学习·算法·机器学习
造夢先森8 小时前
Transformer & LLaMA
深度学习·transformer·llama
神经美学_茂森9 小时前
神经网络防“失忆“秘籍:弹性权重固化如何让AI学会“温故知新“
人工智能·深度学习·神经网络