P4:Transforms的使用

transform.py就像是一个工具箱,里面有很多工具(如:totensor、resize等不同的工具)。

使用规则:

拿特定格式的图片,通过使用工具,得到想要的结果。

1、transforms.ToTensor()的使用

1、作用:

将 PIL 、 numpy格式的图片转换为 tensor格式。

2、使用方法:

# 创建类
tensor_trans = transforms.ToTensor()
# 传参
img_trans = tensor_trans(img)

3、例子:

from PIL import Image
from torchvision import transforms

# 绝对路径 D:\workspace\PyTorch\hymenoptera_data\train\ants\0013035.jpg
# 相对路径 hymenoptera_data/train/ants/0013035.jpg
img_path = 'hymenoptera_data/train/ants/0013035.jpg'
img = Image.open(img_path)
# print(img)

# 1、transforms该如何使用
tensor_trans = transforms.ToTensor() # 对class进行创建
tensor_img = tensor_trans(img)

print(tensor_img)

4、用tensorboard来检验一下:

代码如下:

from PIL import Image
from torch.utils.tensorboard import SummaryWriter
from torchvision import transforms

# python的用法 -》 tensor数据类型
# 通过transforms.ToTensor去解决两个问题
# 1、transforms该如何使用
# 2、为什么我们需要Tensor数据类型

# 绝对路径 D:\workspace\PyTorch\hymenoptera_data\train\ants\0013035.jpg
# 相对路径 hymenoptera_data/train/ants/0013035.jpg
img_path = 'hymenoptera_data/train/ants/0013035.jpg'
img = Image.open(img_path)
# print(img)

# 1、transforms该如何使用
tensor_trans = transforms.ToTensor() # 对class进行创建
tensor_img = tensor_trans(img)

print(tensor_img)


# 2、为什么我们需要Tensor数据类型
# tensor包括了我们神经网络中的一些参数,相当于对数据进行了包装
writer = SummaryWriter("logs")
writer.add_image("Tensor_img",tensor_img)
writer.close()

结果如下:

2、transforms.Normalize()的使用

1、作用:

将输入图片 减去均值,再除以方差

2、使用方法:

# 继承类
trans_norm = transforms.Normalize(均值,标准差) # 根据通道数来写
# 如果是RGB三通道的话,举例为: ([1,2,3] , [4,5,6])

# 调用传参
img_norm = trans_norm(img) # 这里img需要是tensor类型的

3、例子:

from PIL import Image
from torch.utils.tensorboard import SummaryWriter
from torchvision import transforms

writer = SummaryWriter('logs')
img = Image.open('image/color.jpg')
print(img)

# ToTensor 的使用
trans_totensor = transforms.ToTensor()
img_tensor = trans_totensor(img)
print(img_tensor.shape)
writer.add_image('ToTensor',img_tensor)

# Normalize
print(img_tensor[0][0][0])
trans_norm = transforms.Normalize([3, 4, 6], [7, 3, 2])
img_norm = trans_norm(img_tensor)
print(img_norm[0][0][0])
writer.add_image("Normalize", img_norm, 2)

4、用tensorboard来检验一下:

结果如下:

3、transforms.Resize()的使用

1、作用:

将 PIL 格式的图片转换为特定尺寸。

2、使用方法:

# 继承类
trans_resize = transforms.Resize((xxx,xxx)) # xxx表示想要的尺寸
# 调用并传参
img_resize = trans_resize(img) # 这里img必须是PIL格式的

3、例子:

# Resize
print(img.size)
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 = trans_totensor(img_resize)
print(img_resize)
writer.add_image("Resize",img_resize,0)

4、用tensorboard来检查一下:

结果如下:

4、transform.Compose()的使用

1、作用:

可以将多种变换进行组合。

2、使用方法:

# 继承类
trans_compose = transform.Compose([trans_resize_2 , trans_totensor])
# Compose()中的参数需要是一个列表

# 调用传参
img_resize_2 = trans_compose(img)

3、例子:

# Compose - resize  --- 2
# Compose进行的是一个等比缩放,不改变高和宽的比例,只改变最小边和最长边的大小关系
trans_resize_2 = transforms.Resize(512)
# PIL -> PIL -> tensor
trans_compose = transforms.Compose([trans_resize_2, trans_totensor])
# Compose()的用法:
# Compose()中的参数需要是一个列表,Python中,列表的表示形式为[数据1、数据2...]
# 在Compose中,数据 需要是transforms类型
# 所以得到,Compose([transforms参数1,transforms参数2...])
img_resize_2 = trans_compose(img)
writer.add_image('Resize2',img_resize_2,0)

4、用tensorboard来检查一下:

结果如下:

5、transforms.RandomCrop()的使用

1、作用:

随机裁剪出所需尺寸的图片

2、使用方法:

# 继承类
trans_random = transforms.RandomCrop((100,200))

# 调用传参
trans_compose_2 = transforms.Compose([trans_random, trans_totensor])

3、例子:

# RandomCrop
trans_random = transforms.RandomCrop((100,200))
trans_compose_2 = transforms.Compose([trans_random, trans_totensor])
for i in range(10):
    img_crop = trans_compose_2(img)
    writer.add_image("RandomCrop",img_crop, i)
writer.close()

4、使用tensorboard来检查一下:

结果如下:

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
torch::data::transforms::Lambda是PyTorch C++ API中的一个数据转换函数,允许用户使用自定义的Lambda函数来对数据进行转换。其使用方法如下: 1. 首先,需要包含头文件: ```c++ #include <torch/data/transforms/lambda.h> ``` 2. 然后,定义一个Lambda函数,该函数接受一个Tensor类型的输入参数,对其进行转换并返回一个新的Tensor类型的输出结果。例如,下面定义了一个Lambda函数,将输入的Tensor类型数据除以2: ```c++ auto my_lambda = [](torch::Tensor x) -> torch::Tensor { return x / 2; }; ``` 3. 最后,将Lambda函数作为参数传递给Lambda转换函数,创建一个Lambda转换对象。该对象可以被应用于数据集或数据加载器中,对数据进行转换。例如,下面创建了一个Lambda转换对象,将数据集中的所有Tensor类型数据都除以2: ```c++ auto my_transform = torch::data::transforms::Lambda(my_lambda); auto transformed_dataset = dataset.map(my_transform); ``` 上述代码中,dataset是一个数据集对象,map函数会将数据集中的每个样本都应用my_transform转换对象,从而得到一个新的数据集对象transformed_dataset。该数据集对象中的所有Tensor类型数据都已经被除以2。 4. 如果要将Lambda转换对象应用于数据加载器中,可以使用transform函数,例如: ```c++ auto dataloader = torch::data::make_data_loader(dataset, batch_size).map(my_transform); ``` 上述代码中,make_data_loader函数会创建一个数据加载器对象dataloader,该对象会从数据集dataset中获取数据,每次获取batch_size个样本。map函数会将dataloader中的每个Tensor类型数据都应用my_transform转换对象。 总之,torch::data::transforms::Lambda是一个非常灵活的数据转换函数,可以让用户自由定义转换操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不错就是对

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值