• 深度学习(小土堆)


    transforms.ToTensor()

    在 PyTorch 中,transforms.ToTensor() 是一个常用的图像转换操作之一。它的作用是将 PIL 图像或 NumPy 数组转换成 PyTorch 的 Tensor 对象。

    Tensor 对象是 PyTorch 中表示多维数组的数据类型,类似于 NumPy 数组。相比于 PIL 图像和 NumPy 数组,Tensor 对象更适合在深度学习模型中使用。

    transforms.ToTensor() 的具体功能包括:

    将 PIL 图像从范围为 [0, 255] 的整数转换为范围为 [0, 1] 的浮点数。
    如果输入是多通道的图像(例如 RGB 图像),则会对每个通道进行相同的转换。
    在这里插入图片描述

    PIL

    PIL(Python Imaging Library)是一个用于处理图像的常用 Python 库。它提供了一套丰富的图像处理功能,可以打开、保存、创建和编辑各种常见的图像格式,如 JPEG、PNG、BMP 等。

    在 PIL 中,图像被表示为 Image 对象。通过使用 PIL 库中的函数和方法,我们可以对图像进行各种操作,如调整大小、裁剪、旋转、滤镜应用、像素操作等。

    PIL 图像对象具有一些常见的属性和方法,例如:

    size 属性:返回图像的大小(宽度和高度)。
    mode 属性:返回图像的色彩模式(例如,“RGB” 表示彩色图像)。
    resize() 方法:调整图像的尺寸。
    crop() 方法:裁剪图像。
    rotate() 方法:旋转图像。
    save() 方法:将图像保存到文件中。
    使用 PIL,我们可以轻松地加载图像、进行基本的图像处理和图像增强,并将其用于深度学习、计算机视觉和图像处理任务中。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    transform

    在深度学习中,数据预处理是非常重要的一步。在 PyTorch 中,transform 模块为我们提供许多常见的图像数据预处理方法,以便于我们将其应用于数据集。transform 模块提供的数据预处理方法包括:

    transforms.Compose(transforms):将多个数据预处理方法合并成一个组合预处理方法。
    transforms.Resize(size):改变图像的大小。
    transforms.CenterCrop(size):对图像进行中心裁剪。
    transforms.RandomCrop(size):对图像进行随机裁剪。
    transforms.RandomHorizontalFlip():对图像进行随机水平翻转。
    transforms.RandomRotation(degrees):对图像进行随机旋转。
    transforms.Normalize(mean, std):对图像进行归一化。

    import torchvision.transforms as transforms
    
    # 定义数据预处理方法
    transform = transforms.Compose([
        transforms.Resize(256),
        transforms.CenterCrop(224),
        transforms.RandomHorizontalFlip(),
        transforms.RandomRotation(10),
        transforms.ToTensor(),
        transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])
    ])
    
    # 应用数据预处理
    dataset = torchvision.datasets.ImageFolder('path/to/data', transform=transform)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    该示例将图像大小调整为 256×256,然后对其进行中心裁剪为 224×224,并应用随机水平翻转、随机旋转、将图像转换成 Tensor 对象和归一化等数据预处理操作。transforms.Compose() 函数将所有预处理操作合并到一个预处理方法中。
    使用 transform 模块可以方便地对图像进行多种预处理操作,从而提高深度学习模型的性能。
    在 PyTorch 的 transforms 模块中,我们可以首先创建数据预处理方法的实例,然后将这些实例作为函数来使用,传递需要预处理的数据作为参数。
    例如,transform.ToTensor() 是将图像转换为 Tensor 对象的预处理方法。首先创建一个 ToTensor 的实例,然后将该实例作为函数调用并传递需要转换的图像作为参数。
    在这里插入图片描述
    在这里插入图片描述
    SummaryWriter 是 PyTorch 的 TensorBoard 模块中的一个类,用于创建和记录 TensorBoard 事件文件。
    使用 SummaryWriter 创建、记录和关闭事件文件,并使用 add_image 方法添加图片数据:

    from tensorboardX import SummaryWriter
    import numpy as np
    import torch
    
    # 创建 SummaryWriter 实例
    writer = SummaryWriter()
    
    # 添加图片数据
    image_np = np.random.randn(3, 32, 32)  # 示例中使用随机生成的图像数据
    image_tensor = torch.from_numpy(image_np)
    writer.add_image('Image', image_tensor, global_step=0)  # global_step 为可选参数,用于指定写入的步骤数
    
    # 关闭 SummaryWriter
    writer.close()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    ①导入了 SummaryWriter 类,并创建了一个实例 writer。②然后,生成了一个随机的图像数据 image_np,并将其转换为 PyTorch 的 Tensor 对象 image_tensor。③接下来,使用 writer.add_image 方法将图像数据添加到事件文件中。‘Image’ 是用于标识图像数据的名称,image_tensor 是添加的图像数据,global_step 是可选参数,用于指定写入的步骤数。④最后,使用 writer.close() 关闭 SummaryWriter。使用 SummaryWriter 将各种类型的数据记录到事件文件中,然后使用 TensorBoard 来可视化这些数据,以帮助您分析和理解模型的训练过程。

    常见的transform

    在这里插入图片描述

    normalize

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    在这里插入图片描述

    transforms.Resize(512)

    transforms.Resize(512) 是 PyTorch 中的图像预处理操作之一,用于将图像调整为指定尺寸。
    具体来说,这个操作会将输入图像的较短边调整为 512 个像素,同时保持图像的纵横比不变。如果图像的宽度小于高度,则它的宽度将被调整为 512,并将高度等比例缩放。如果图像的高度小于宽度,则它的高度将被调整为 512,并将宽度等比例缩放。如果图像的宽度和高度都大于 512,则图像将被缩小,以便它的较短边等于 512。
    需要注意的是,transforms.Resize 操作对于大多数图像分类任务来说都是必需的,因为它可以使所有输入图像都具有相同的尺寸,从而便于将它们传递到深度学习模型中进行训练和推理。如果输入图像的大小不同,那么它们需要通过一些额外的操作才能被传递到模型中,这可能会增加模型的计算负担和复杂度,并影响模型的精度和效果。
    总之,transforms.Resize(512) 是一种将输入图像调整为指定尺寸的操作,用于图像分类模型的预处理和数据增强中。
    在这里插入图片描述
    transforms.Resize((512, 512)) 是一种非等比例缩放操作,而 transforms.Resize(512) 是一种等比例缩放操作。非等比例缩放会导致图像的宽高比发生改变,而等比例缩放会保持纵横比不变。

  • 相关阅读:
    python+vue企业人力资源管理系统django569
    数据结构——线性表之顺序表
    Git学习笔记 - Git基本操作和GitHub
    使用定时器按键扫描数码管制作一个可存储数据的秒表
    XSS进阶一
    Vue的数据来源详解
    Maven Jetty运行Spring MVC项目
    Linux之软连接和硬连接的用法和区别【详细!!!】
    【OpenCV 例程300篇】249. 图像的重映射(cv2.remap)
    cgroup version jdk version k8s
  • 原文地址:https://blog.csdn.net/qq_45845375/article/details/134532329