深度学习中用来训练的train.py 探究学习2.0( 数据预处理)

 数据预处理

下列代码为train.py中常见的一些数据处理方法

train_transform = transforms.Compose([
    transforms.Resize((224, 224)),
    transforms.RandomVerticalFlip(),
    # 随机旋转,-45度到45度之间随机选
    transforms.RandomRotation(45),
    # 从中心开始裁剪
    transforms.CenterCrop(224),
    # 随机水平翻转 选择概率值为 p=0.5
    transforms.RandomHorizontalFlip(p=0.5),
    # 随机垂直翻转
    transforms.RandomVerticalFlip(p=0.5),
    # 参数:亮度、对比度、饱和度、色相
    transforms.ColorJitter(brightness=0.2, contrast=0.1, saturation=0.1, hue=0.1),
    # 转为3通道灰度图 R=G=B 概率设定0.025
    transforms.RandomGrayscale(p=0.025),
    transforms.ToTensor(),
    transforms.Normalize([0.5, 0.5, 0.5], [0.5, 0.5, 0.5])])

1.transforms.Resize

在下述示例中,我们首先使用PIL库的Image.open方法读取了一张图片。然后,我们使用transforms.Resize(500)定义了一个resize操作,将图片的短边缩放至500像素,同时保持长宽比不变。最后,我们将resize操作应用到图片上,得到了resize后的图片resized_image。最后一步是使用show方法显示resize后的图片。

from PIL import Image
from torchvision import transforms

# 读取图片
image = Image.open('image.jpg')

# 定义transforms.Resize操作
resize = transforms.Resize(500)

# 对图片进行resize操作
resized_image = resize(image)

# 显示resize后的图片
resized_image.show()

将resize = transforms.Resize(500) 改为 resize = transforms.Resize((500,500))

 

2. transforms.RandomVerticalFlip

transforms.RandomVerticalFlip是一个PyTorch中的数据预处理方法,用于垂直翻转图像。它可以根据给定的概率p,以p的概率对图像进行垂直翻转,以1-p的概率保持原始图像不变。

以下是一个使用transforms.RandomVerticalFlip的示例代码:

import torch
from torchvision import transforms
from PIL import Image

# 加载图像
image = Image.open('image.jpg')

# 定义数据预处理方法
transform = transforms.Compose([
    transforms.RandomVerticalFlip(p=0.5)
])

# 对图像进行数据预处理
transformed_image = transform(image)

# 显示预处理后的图像
transformed_image.show()

在上面的示例中,我们首先加载了一张图像,然后定义了一个transforms.Compose对象,其中包含了transforms.RandomVerticalFlip方法。接下来,我们将图像传递给transform对象,它会根据给定的概率p对图像进行垂直翻转。最后,我们显示了预处理后的图像。 

3. transforms.RandomHorizontalFlip 

transforms.RandomHorizontalFlip是torchvision.transforms中的一个类,用于对图像进行随机水平翻转的操作。它可以将图像水平翻转,即左右翻转。这个操作可以增加数据的多样性,提高模型的泛化能力。

下面是一个使用transforms.RandomHorizontalFlip的示例代码:

import torchvision.transforms as transforms
from PIL import Image

# 创建一个RandomHorizontalFlip对象
transform = transforms.RandomHorizontalFlip(p=0.5)

# 加载图像
image = Image.open('image.jpg')

# 对图像进行水平翻转
flipped_image = transform(image)

# 显示原始图像和翻转后的图像
image.show()
flipped_image.show()

在上面的代码中,我们首先导入了transforms模块和Image模块。然后,我们创建了一个RandomHorizontalFlip对象,并设置了翻转的概率为0.5。接下来,我们加载了一张图像,并使用transform对图像进行水平翻转操作。最后,我们分别显示了原始图像和翻转后的图像。 

4. transforms.RandomRotation 随机旋转

transforms.RandomRotation是PyTorch中的一个图像变换操作,用于对图像进行随机旋转。它可以将图像按照一定的角度范围进行随机旋转,增加数据的多样性和鲁棒性。

以下是transforms.RandomRotation的使用示例:

import torchvision.transforms as transforms
from PIL import Image

# 创建一个RandomRotation对象,设置旋转角度范围为±30度
random_rotation = transforms.RandomRotation(30)

# 加载图像
image = Image.open('image.jpg')

# 对图像进行随机旋转
rotated_image = random_rotation(image)

# 显示旋转后的图像
rotated_image.show()

在上述示例中,我们首先导入了transforms模块和Image类。然后,我们创建了一个RandomRotation对象,并设置旋转角度范围为±30度。接下来,我们加载了一张图像,并使用random_rotation对图像进行随机旋转。最后,我们显示了旋转后的图像。

5. transforms.CenterCrop 中心裁剪

transforms.CenterCrop是PyTorch中的一个图像变换函数,用于对图像进行中心裁剪。它可以根据给定的尺寸对图像进行裁剪,并将图像的中心部分保留下来。

以下是一个使用transforms.CenterCrop的示例代码:

import torchvision.transforms as transforms
from PIL import Image

# 加载图像
image = Image.open('image.jpg')

# 定义裁剪尺寸
crop_size = 224

# 创建CenterCrop变换对象
center_crop = transforms.CenterCrop(crop_size)

# 对图像进行中心裁剪
cropped_image = center_crop(image)

# 显示裁剪后的图像
cropped_image.show()

在上面的示例中,我们首先导入了transforms模块和Image类。然后,我们加载了一张图像,并定义了裁剪尺寸为224。接下来,我们创建了一个CenterCrop变换对象,并将裁剪尺寸作为参数传递给它。最后,我们使用center_crop对象对图像进行中心裁剪,并显示裁剪后的图像。

6.   transforms.ColorJitter(brightness=0.2, contrast=0.1, saturation=0.1, hue=0.1)

transforms.ColorJitter是PyTorch中的一个图像变换类,它可以改变图像的亮度、对比度、饱和度和色调等属性。在你提供的例子中,brightness=0.2表示将图像的亮度随机变化为原图亮度的80%(1-0.2)到120%(1+0.2)之间。同样地,contrast=0.1saturation=0.1hue=0.1分别表示对比度、饱和度和色调的变化范围。

以下是一个示例代码,展示了如何使用transforms.ColorJitter来改变图像的亮度、对比度、饱和度和色调属性:

import torch
from torchvision import transforms

# 创建一个ColorJitter对象,设置亮度、对比度、饱和度和色调的变化范围
jitter = transforms.ColorJitter(brightness=0.2, contrast=0.1, saturation=0.1, hue=0.1)

# 加载图像
image = Image.open('image.jpg')

# 对图像进行变换
transformed_image = jitter(image)

# 显示变换后的图像
transformed_image.show()

这段代码会加载一张名为image.jpg的图像,并使用transforms.ColorJitter对图像进行亮度、对比度、饱和度和色调的变换。最后,显示变换后的图像。

可以明显看到这些人的脸更红了

7.transforms.RandomGrayscale

transforms.RandomGrayscale是一个用于随机将图像转换为灰度图像的操作。它可以在图像上随机选择一些像素,并将它们转换为灰度值,而其他像素保持不变。

下面是一个使用transforms.RandomGrayscale的示例代码:

import torchvision.transforms as transforms
from PIL import Image

# 加载图像
image = Image.open("image.jpg")

# 定义transforms
transform = transforms.Compose([
    transforms.RandomGrayscale(p=0.5),

])

# 对图像进行转换
transformed_image = transform(image)

# 显示转换后的图像
transformed_image.show()

在上面的示例中,我们首先加载了一张图像,然后定义了一个transforms.Compose对象,其中包含了transforms.RandomGrayscale操作和transforms.ToTensor操作。然后,我们将图像应用于这个transforms对象,得到了转换后的图像。最后,我们使用show()方法显示了转换后的图像。

8.transforms.ToTensor()

transforms.ToTensor()是PyTorch中的一个图像转换函数,它将PIL图像或NumPy数组转换为张量(Tensor)。这个函数的作用是将图像数据从范围[0, 255]转换为范围[0.0, 1.0]的浮点数张量,并且将通道顺序从H×W×C转换为C×H×W。

下面是一个使用transforms.ToTensor()的示例:

import torch
from torchvision import transforms

# 假设有一张PIL图像img
img = Image.open('image.jpg')

# 创建一个transforms对象,将图像转换为张量
transform = transforms.ToTensor()

# 使用transforms对象对图像进行转换
tensor_img = transform(img)

print('tensor_img',tensor_img.shape)

print(tensor_img)

输出结果将是一个形状为[C, H, W]的张量,其中C是通道数,H是图像的高度,W是图像的宽度。

tensor_img torch.Size([3, 375, 500])
tensor([[[1.0000, 1.0000, 1.0000,  ..., 1.0000, 1.0000, 1.0000],
         [1.0000, 1.0000, 1.0000,  ..., 1.0000, 1.0000, 1.0000],
         [1.0000, 1.0000, 1.0000,  ..., 1.0000, 1.0000, 1.0000],
         ...,
         [0.5333, 0.4431, 0.4667,  ..., 0.4392, 0.4431, 0.4627],
         [0.4510, 0.6275, 0.4549,  ..., 0.4510, 0.4196, 0.4235],
         [0.5804, 0.4196, 0.3961,  ..., 0.4588, 0.4275, 0.4157]],

        [[1.0000, 1.0000, 1.0000,  ..., 1.0000, 1.0000, 1.0000],
         [1.0000, 1.0000, 1.0000,  ..., 1.0000, 1.0000, 1.0000],
         [1.0000, 1.0000, 1.0000,  ..., 1.0000, 1.0000, 1.0000],
         ...,
         [0.4941, 0.4078, 0.4392,  ..., 0.4392, 0.4314, 0.4510],
         [0.4000, 0.5882, 0.4275,  ..., 0.4392, 0.4039, 0.4078],
         [0.5176, 0.3804, 0.3843,  ..., 0.4471, 0.4118, 0.3882]],

        [[1.0000, 1.0000, 1.0000,  ..., 1.0000, 1.0000, 1.0000],
         [1.0000, 1.0000, 1.0000,  ..., 1.0000, 1.0000, 1.0000],
         [1.0000, 1.0000, 1.0000,  ..., 1.0000, 1.0000, 1.0000],
         ...,
         [0.4471, 0.3725, 0.4078,  ..., 0.4078, 0.3961, 0.4157],
         [0.3373, 0.5490, 0.3961,  ..., 0.4039, 0.3686, 0.3725],
         [0.4549, 0.3412, 0.3569,  ..., 0.4196, 0.3765, 0.3569]]])

9.transforms.Normalize([0.5, 0.5, 0.5], [0.5, 0.5, 0.5])

transforms.Normalize([0.5, 0.5, 0.5], [0.5, 0.5, 0.5])是PyTorch中的一个数据预处理操作,用于将图像数据进行归一化处理。具体来说,它将输入的图像数据减去均值[0.5, 0.5, 0.5],然后再除以标准差[0.5, 0.5, 0.5],从而使得处理后的图像数据的均值为0,标准差为1。

这个操作的目的是为了使得模型更容易收敛,因为经过归一化处理后的数据符合标准正态分布。在归一化之前,图像数据的像素值通常是在[0, 1]的范围内,归一化之后,像素值会变成在[-1, 1]的范围内。

需要注意的是,如果使用的是transforms.Normalize(channel_mean, channel_std),其中channel_mean和channel_std是根据数据计算得到的均值和标准差,那么归一化之后的数据的均值会变成0,标准差会变成1。

以下是一个示例代码,演示了如何使用transforms.Normalize进行图像数据的归一化处理:

import torch
import torchvision.transforms as transforms

# 假设img是一个图像数据
img = ...

# 定义归一化操作
normalize = transforms.Normalize([0.5, 0.5, 0.5], [0.5, 0.5, 0.5])

# 对图像数据进行归一化处理
normalized_img = normalize(img)

# 打印归一化后的图像数据
print(normalized_img)

输出

normalized_img torch.Size([3, 375, 500])
tensor([[[ 1.0000,  1.0000,  1.0000,  ...,  1.0000,  1.0000,  1.0000],
         [ 1.0000,  1.0000,  1.0000,  ...,  1.0000,  1.0000,  1.0000],
         [ 1.0000,  1.0000,  1.0000,  ...,  1.0000,  1.0000,  1.0000],
         ...,
         [ 0.0667, -0.1137, -0.0667,  ..., -0.1216, -0.1137, -0.0745],
         [-0.0980,  0.2549, -0.0902,  ..., -0.0980, -0.1608, -0.1529],
         [ 0.1608, -0.1608, -0.2078,  ..., -0.0824, -0.1451, -0.1686]],

        [[ 1.0000,  1.0000,  1.0000,  ...,  1.0000,  1.0000,  1.0000],
         [ 1.0000,  1.0000,  1.0000,  ...,  1.0000,  1.0000,  1.0000],
         [ 1.0000,  1.0000,  1.0000,  ...,  1.0000,  1.0000,  1.0000],
         ...,
         [-0.0118, -0.1843, -0.1216,  ..., -0.1216, -0.1373, -0.0980],
         [-0.2000,  0.1765, -0.1451,  ..., -0.1216, -0.1922, -0.1843],
         [ 0.0353, -0.2392, -0.2314,  ..., -0.1059, -0.1765, -0.2235]],

        [[ 1.0000,  1.0000,  1.0000,  ...,  1.0000,  1.0000,  1.0000],
         [ 1.0000,  1.0000,  1.0000,  ...,  1.0000,  1.0000,  1.0000],
         [ 1.0000,  1.0000,  1.0000,  ...,  1.0000,  1.0000,  1.0000],
         ...,
         [-0.1059, -0.2549, -0.1843,  ..., -0.1843, -0.2078, -0.1686],
         [-0.3255,  0.0980, -0.2078,  ..., -0.1922, -0.2627, -0.2549],
         [-0.0902, -0.3176, -0.2863,  ..., -0.1608, -0.2471, -0.2863]]])

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/268162.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Python实验:关灯游戏

文章目录 前言一、设计表二、关键代码三、运行结果小地图,容易难度:中地图,中等难度:大地图,困难难度: 四、完整代码链接总结 前言 这是一个Python实验作业,内容如下: 题目要求&am…

游戏软件提示d3dcompiler_43.dll的五个解决方法,亲测靠谱

在使用电脑进行工作,玩游戏的时候,我们常常会遇到一些错误提示,其中之一就是“D3DCompiler_43.dll丢失”的提示。D3DCompiler_43.dll是一个非常重要的动态链接库文件。它是由DirectX SDK提供的,用于编译和优化DirectX着色器代码的…

CnosDB:深入了解时序数据处理函数

CnosDB 是一个专注于时序数据处理的数据库,旨在解决时序数据存储与分析问题,为用户提供高效的时序数据管理与查询便利。为了实现这一目标,CnosDB 实现了一系列专用函数,快来和CC一起来看看吧! CnosDB:深入了…

进程间通信---信号

什么是信号? 】 信号处理流程 信号类型 发送信号的函数 参数sig:代表 信号 接收信号的函数 参数 handle 的处理方式有几种? 实例代码 实例逻辑 图中的等待操作使用:pause()函数 代码 在这里插入代码片…

区域摇杆制作

区域摇杆 介绍界面制作脚本总结 介绍 我之前讲过摇杆,那么看到现在游戏做区域摇杆的更多一些,那么我们来剖析一下。说白了区域摇杆就是在之前固定摇杆的基础上增加了一个启动事件,当我们开始拖拽的时候,我们将摇杆现实启动然后位…

uniapp cli开发和HBuilderX开发

uniapp cli开发和HBuilderX开发 前言 uniapp是一个跨平台的开发框架,可以开发出微信小程序、支付宝小程序、百度小程序、头条小程序、H5、App等,开发者只需要写一套代码,就可以发布到各个平台,大大提高了开发效率。 uniapp的开…

动态规划系列 | 最长上升子序列模型(上)

文章目录 最长上升子序列回顾题目描述问题分析程序代码复杂度分析 怪盗基德的滑翔翼题目描述输入格式输出格式 问题分析程序代码复杂度分析 登山题目描述输入格式输出格式 问题分析程序代码复杂度分析 合唱队形题目描述输入格式输出格式 问题分析程序代码复杂度分析 友好城市题…

驾驶未来:百度Apollo自动驾驶技术的探索与实践(文末赠送apollo周边)

🎬 鸽芷咕:个人主页 🔥 个人专栏:《linux深造日志》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活! ⛳️ 粉丝福利活动 ✅参与方式:通过连接报名观看课程,即可免费获取精美周边 ⛳️活动链接&#xf…

改进YOLOv8注意力系列三:结合CrissCrossAttention、ECAAttention、EMAU期望最大化注意力

改进YOLOv8注意力系列三:结合CrissCrossAttention、ECAAttention、EMAU期望最大化注意力 代码CrissCrossAttention注意力ECAAttention通道注意力EMAU期望最大化注意力加入方法各种yaml加入结构本文提供了改进 YOLOv8注意力系列包含不同的注意力机制以及多种加入方式,在本文中…

【5G PHY】NR参考信号功率和小区总传输功率的计算

博主未授权任何人或组织机构转载博主任何原创文章,感谢各位对原创的支持! 博主链接 本人就职于国际知名终端厂商,负责modem芯片研发。 在5G早期负责终端数据业务层、核心网相关的开发工作,目前牵头6G算力网络技术标准研究。 博客…

什么是网站监控?

网站监控是跟踪网站的可用性和性能,以最小化宕机时间,优化性能并确保顺畅的用户体验。维护网站正常运行对于任何企业来说都是至关重要的,因而对大多数业务来说,网站应用监控都是一个严峻的挑战。Applications Manager网站应用监控…

2024年【金属非金属矿山安全检查(地下矿山)】模拟试题及金属非金属矿山安全检查(地下矿山)模拟考试题

题库来源:安全生产模拟考试一点通公众号小程序 金属非金属矿山安全检查(地下矿山)模拟试题参考答案及金属非金属矿山安全检查(地下矿山)考试试题解析是安全生产模拟考试一点通题库老师及金属非金属矿山安全检查&#…

C++系列第九篇 数据类型下篇 - 复合类型(指针高级应用)

系列文章 C 系列 前篇 为什么学习C 及学习计划-CSDN博客 C 系列 第一篇 开发环境搭建(WSL 方向)-CSDN博客 C 系列 第二篇 你真的了解C吗?本篇带你走进C的世界-CSDN博客 C 系列 第三篇 C程序的基本结构-CSDN博客 C 系列 第四篇 C 数据类型…

redis基本用法学习(C#调用FreeRedis操作redis)

FreeRedis属于常用的基于.net的redis客户端,EasyCaching中也提供适配FreeRedis的包。根据参考文献4中的说法,FreeRedis和CsRedis算是近亲(都是GitHub中账号为2881099下的开源项目),因此其用法特别相似。FreeRedis的主要…

MoveIt!生成的机器人**_moveit_config包中config文件和launch文件

MoveIt!生成的机器人**_moveit_config包中config文件和launch文件 MoveItconfig文件srdfcartesian_limits.yamljoint_limits.yamlfake_controllers.yamsimple_moveit_controllers.yamlgazebo_controllers.yaml1. ros_controllers.yamlkinematics.yamlsensors_3d.yamlompl_plann…

【Qt之Quick模块】6. QML语法详解_1 基础语法与三种导入语句

前言 通过以上1-5文档的介绍,Quick与QML的概念及QML语法、类型、文件作用等已叙述个大概,接下来是对QML语法进行展开来说。 其实,学习任何一门语言或者做任何一件事情,并不用一开始就要求尽善尽美,做个无懈可击&…

vue3组件通信(父给子传参,子调用父的方法,父调用子的方法,顶层组件给底层组件传参,底层组件调用顶层组件的方法)

目录 1.父传子(父给子传参) 2.子传父(子调用父的方法) 3.父调用子的方法 4.顶层给底层传参,底层调用顶层的方法 5.模板引用 1.父传子(父给子传参) ①.步骤 父组件中给子组件通过绑定属性…

收银管理系统怎样帮助商家很好地经营服装门店

收银管理系统对于服装门店的经营可以提供多方面的帮助,以下是一些具体的优势和功能: 1. 快速准确的收银:收银管理系统可以实现快速、准确的收银操作,通过条码扫描或手动输入商品信息,自动计算价格并生成收据。这样可以…

nacos配置中心配置已经常见错误总结

💻目录 前言1、基础架构2、依赖3、配置文件3.1、bolg-product配置文件3.1.1、application.yml配置文件3.1.2、bootstrap.yml配置文件3.1.3、nacos远程配置 3.2、bolg-system3.1.1、application.yml配置文件3.1.2、bootstrap.yml配置文件3.2.3、nacos远程配置 4、测试…

【文本处理】正则表达式

一、简介 正则表达式,又称规则表达式,(Regular Expression,在代码中常简写为regex、regexp或RE),是一种文本模式,包括普通字符(例如,a 到 z 之间的字母)和特殊字符&…