PyTorch深度学习入门-1

PyTorch深度学习快速入门教程(绝对通俗易懂!)【小土堆】_哔哩哔哩_bilibili

\

  PyTorch 和 TensorFlow 是两个深度学习框架,TensorBoard 是 TensorFlow 提供的可视化工具,Transforms是 PyTorch 中用于数据预处理的工具,而神经网络则是深度学习模型的基础。在深度学习项目中,通常会同时使用这些工具和概念,以构建、训练和评估神经网络模型。

一、TensorBoard 的使用

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

tag (str): Data identifier: 这个参数是一个字符串类型,用于标识数据的身份或者标签。

img_tensor (torch.Tensor, numpy.ndarray, or string/blobname): 这个参数可以接受多种类型的输入,包括 torch.Tensor、numpy.ndarray、字符串或者 blob 名称。通常用于传入图像数据。

global_step (int): Global step value to record: 这个参数是一个整数类型,用于记录全局步骤值,可以用来跟踪训练的进度或者迭代次数


1.

Image 也未定义。这表明你可能没有正确导入包含 Image 类的模块。通常情况下,Image 类是从 Python 的 PIL 库(Pillow 库的一部分)中导入的。


2.利用Opencv读取图片,获得numpy型图片

import numpy as np 是 Python 中用于导入 numpy 模块并给模块起一个别名的语句。

具体来说,import numpy 表示导入 numpy 模块,numpy 是一个用于科学计算的常用库,提供了许多用于数组操作和数学运算的功能。

而 as np 则是为导入的 numpy 模块指定了一个别名 np,可以使用 np 来代替 numpy 来访问 numpy 模块中的函数和类。


3.

PIL 是一个库,它是 Python Imaging Library 的缩写,用于处理图像数据。在这里我们使用 from PIL import Image 导入了 PIL 库中的 Image 类

  1. tag:用于标识图像的标签或名称。
  2. img_tensor:包含图像数据的张量。通常是一个四维张量,形状为 [batch_size, channels, height, width],其中 batch_size 表示批量大小,channels 表示通道数,height 表示图像高度,width 表示图像宽度。
  3. global_step(可选):用于指定图像的全局步数或时间戳,以便与其他数据对齐。例如,在训练神经网络时,可以将当前的训练步数作为 global_step
  4. walltime(可选):用于指定图像的时间戳,通常用于在 TensorBoard 中按时间查看数据。如果未提供,则会使用当前时间。
  5. dataformats(可选):指定图像数据的格式。常见的格式包括 "CHW"(通道-高度-宽度)和 "HWC"(高度-宽度-通道),默认为 "CHW"。

from PIL import Image
import numpy as np
from Transforms_ import writer
img_PIL = Image.open("val/ants/183260961_64ab754c97.jpg")
img_array = np.array(img_PIL)
writer.add_image("test" , img_array , 1,dataformats='HWC')
writer.close()

第二张图片:

想让第二张图片单独输出,:

  1. 删除日志中的第一张图片相关信息: 在写入第二张图片之前,关闭写入器(writer),然后重新创建一个新的写入器,并且不要添加第一张图片的信息。这样第二张图片就会成为新日志中的唯一图片。

    from PIL import Image
    import numpy as np
    from Transforms_ import writer
    
    # 写入第一张图片的代码
    img_PIL = Image.open("val/ants/183260961_64ab754c97.jpg")
    img_array = np.array(img_PIL)
    writer.add_image("test" , img_array , 1,dataformats='HWC')
    
    # 关闭写入器
    writer.close()
    
    # 创建新的写入器,并写入第二张图片的代码
    writer = SummaryWriter()  # 这里根据你的实际情况创建 SummaryWriter
    img_PIL = Image.open("val/bees/59798110_2b6a3c8031.jpg")
    img_array = np.array(img_PIL)
    writer.add_image("test" , img_array , 2,dataformats='HWC')
    
    # 关闭写入器
    writer.close()
    

    2.另一种方法是给第一张图片的标签(tag)添加一个唯一的标识,例如,在第一张图片的标签中加上后缀 "_1",而第二张图片的标签中加上后缀 "_2"。这样就可以保留两张图片的信息,但它们会有不同的标签,从而单独输出

    from PIL import Image
    import numpy as np
    from Transforms_ import writer
    
    # 写入第一张图片的代码
    img_PIL = Image.open("val/ants/183260961_64ab754c97.jpg")
    img_array = np.array(img_PIL)
    writer.add_image("test_1" , img_array , 1,dataformats='HWC')
    
    # 写入第二张图片的代码
    img_PIL = Image.open("val/bees/59798110_2b6a3c8031.jpg")
    img_array = np.array(img_PIL)
    writer.add_image("test_2" , img_array , 2,dataformats='HWC')
    
    # 关闭写入器
    writer.close()
    

    二、Transforms的使用

使用方法:

1.多查看官网文档

2.关注输入输出参数

3.返回值未知时:

4.打断点,调试

1.ToTensor

from torch.utils.tensorboard import SummaryWriter
from torchvision import transforms
from PIL import Image
img_path = "val/ants/8124241_36b290d372.jpg"
#ToTensor
img = Image.open(img_path)
tensor_trans = transforms.ToTensor()
tensor_img = tensor_trans(img)
print(tensor_img)
writer = SummaryWriter("logs")
writer.add_image("tensor_img",tensor_img)
writer.close()

2.Normalize

#Normalize
#print(tensor_img[0][0][0])
trans_norm = transforms.Normalize([0.5,0.5,0.5],[0.5,0.5,0.5])
img_norm = trans_norm(tensor_img)
#print(img_norm[0][0][0])
writer.add_image("Normalize",img_norm)

3.Resize

  接受一个参数 size,它可以是一个序列(sequence)或者一个整数(int)。参数 size 表示期望的输出尺寸。如果 size 是一个类似于 (h, w) 的序列,那么输出的尺寸将会被调整成与这个序列相匹配的大小。如果 size 是一个整数,那么图像的较小边将会被调整到这个数字所代表的大小。举个例子,如果图像的高度大于宽度,那么图像将会被调整成 (size * height / width, size) 的大小。

想要在Transform进行显示,需要修改为to_tensor 类型

#Resize
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 = tensor_trans(img_resize)
print(img_resize)
writer.add_image("Resize",img_resize)
writer.close()

4.Compose

5.RandomCrop

#RandomCrop 随机裁剪
#要注意裁剪尺寸不要超过实际尺寸
trans_random=transforms.RandomCrop((500,300))
trans_compose_2=transforms.Compose([trans_random,tensor_trans])
for i in range(10):
    img_crop=trans_compose_2(img)
    writer.add_image("RandomCropHW",img_crop,i)

writer.close()

三、使用 torchivision 的标准数据集

torchvision — Torchvision 0.17 documentation (pytorch.org)

from torch.utils.tensorboard import SummaryWriter
from PIL import Image
#导入torchvision模块
import torchvision
#导入torchvision中的transforms子模块
from torchvision import transforms
#定义转换器
transform_ = transforms.Compose([
    transforms.ToTensor(),
])
train_set = torchvision.datasets.CIFAR10(root="./dataset",  train=True, download=True)
test_set = torchvision.datasets.CIFAR10(root="./dataset",  train=True, download=True)

# print(test_set[0])
# print(test_set.classes)
# 第一个样本的图像和标签
img, target = test_set[0]
print(img)
print(target)
print(test_set.classes[target])
img.show()

注意img.show需要的参数类型为PIL

和transforms一起使用,注意参数的修改,并将PIL类型改成Tensor类型

训练数据集,train参数设置为True,加载测试数据集,就将其设置为False

from torch.utils.tensorboard import SummaryWriter
#导入torchvision模块
import torchvision
#导入torchvision中的transforms子模块
from torchvision import transforms
#定义转换器
transform_ = transforms.Compose([
    transforms.ToTensor(),
])
train_set = torchvision.datasets.CIFAR10(root="./dataset", transform=transform_, train=True, download=True)
test_set = torchvision.datasets.CIFAR10(root="./dataset", transform=transform_, train=False, download=True)

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

# print(test_set[0])
writer = SummaryWriter("P14")
for i in range(10):
    img, target = test_set[i]
    writer.add_image("test_set" , img , i)

writer.close()

四、Dataloader的使用

取出数据集dataset的数据

官网查看相关信息:torch.utils.data — PyTorch 1.8.1 documentation

随即抓取:

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=False)

# 测试数据集中的第一张图片及target
writer = SummaryWriter("dataloader")

# 初始化步数
step = 0

# 遍历测试数据集
for data in test_loader:
    imgs, targets = data
    # 将图像添加到TensorBoard
    writer.add_images("test_data", imgs, step)
    step += 1

# 关闭TensorBoard写入器
writer.close()

drop_last=False 时:

最后一张👇

drop_last = True 时 

shuffle修改为True时  👉

  • 18
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值