(1)Transforms用途
① Transforms当成工具箱的话,里面的class就是不同的工具。例如像totensor、resize这些工具。
② Transforms拿一些特定格式的图片,经过Transforms里面的工具,获得我们想要的结果。
(2)Transforms该如何使用
(1) transforms.Totensor使用
# Transforms的使用
# python的用法--tensor数据类型
# 通过transforms.ToTensor去看两个问题
# 1.transforms该如何使用
# 2.为什么我们需要Tensor数据类型
from torchvision import transforms
from PIL import Image
img_path = 'DataSet/train/ants_image/0013035.jpg'
img = Image.open(img_path)
tensor_trans = transforms.ToTensor() # 创建 transforms.ToTensor类 的实例化对象
tensor_img = tensor_trans(img) # 调用 transforms.ToTensor类 的__call__的魔术方法
print(tensor_img)
(2)需要Tensor数据类型原因
① Tensor有一些属性,比如反向传播、梯度等属性,它包装了神经网络需要的一些属性。
from torch.utils.tensorboard import SummaryWriter
from torchvision import transforms
from PIL import Image
import cv2
img_path = "Data/FirstTypeData/val/bees/10870992_eebeeb3a12.jpg"
img = Image.open(img_path)
writer = SummaryWriter("logs")
tensor_trans = transforms.ToTensor()
tensor_img = tensor_trans(img)
writer.add_image("Temsor_img",tensor_img)
writer.close()
② 在 Anaconda 终端里面,激活python环境,再输入 tensorboard --logdir=logs 命令,将网址赋值浏览器的网址栏,回车,即可查看tensorboard显示日志情况。
③ 点击网址可得Tensorboard界面。
(3)常见的Transforms工具
Transforms的工具主要关注它的输入、输出、作用。
(1)__call__魔术方法使用
class Person:
def __call__(self, name):
print("__call__ " + "Hello " + name)
def hello(self, name):
print("hello" + name)
person = Person()
person("hangman")
person.hello("list")
输出结果:
(2)Normanize归一化
归一化的作用:不同维度之间的特征在数值上量纲可能不一样,归一化就是让他们量纲大致差不多,这样梯度下降更快,更容易求解。消除奇异值及样本数据中与其他数据相比特别大或特别小的数据,加快训练速度。
from PIL import Image
from torch.utils.tensorboard import SummaryWriter
from torchvision import transforms
writer = SummaryWriter("../logs")
img = Image.open("E:\\Python\\PytorchDemoOne\\DataSet\\train\\ants_image\\0013035.jpg")
print(img)
# Tensor
trans_totensor = transforms.ToTensor()
img_tensor = trans_totensor(img)
writer.add_image("ToTensor",img_tensor)
# Normalize
print(img_tensor[0][0][0])# 归一化之前结果
trans_norm = transforms.Normalize([0.5,0.5,0.5],[0.5,0.5,0.5])
img_norm = trans_norm(img_tensor)
print(img_norm[0][0][0])# 归一化之后结果
writer.add_image("Normalize",img_norm)
writer.close()
输出结果: