本学习笔记源自于B站up主【我是土堆】的视频教程:PyTorch深度学习快速入门教程(绝对通俗易懂!)【小土堆】
本博客是该视频教程中第12-22个视频的详细学习笔记,第1-11个视频、第23-33个视频的详细学习笔记链接如下:
PyTorch深度学习快速入门教程【小土堆】详细学习笔记(第1-11个视频笔记)
PyTorch深度学习快速入门教程【小土堆】详细学习笔记(第23-33个视频笔记)
目录
12、常见的Transforms(一)
(1)Python中__call__的用法
代码如下(建议复制到PyCharm中阅读):
class Person:
def __call__(self, name): # __表示 call是内置函数
print("__call__"+"hello"+name)
def hello(self, name):
print("hello"+name)
# 主函数
person = Person() # 新建一个 Person对象
# 接下来是两种调用 Person的方式
person("zhangsan")
person.hello("lisi") # 建议用这种调用方法
输出结果如下:
(2)ToTensor的使用
代码如下(建议复制到PyCharm中阅读):
from PIL import Image
from torch.utils.tensorboard import SummaryWriter
from torchvision import transforms
img_path = "lianshou-dataset/train/ants_image/0013035.jpg"
img = Image.open(img_path)
writer = SummaryWriter("tensorboard-test")
# ToTensor的使用
tensor_trans = transforms.ToTensor()
img_tensor = tensor_trans(img)
writer.add_image("ToTensor", img_tensor)
writer.close()
运行结果如下:
(3)Normalize(归一化)的使用
代码如下(建议复制到PyCharm中阅读):
from PIL import Image
from torch.utils.tensorboard import SummaryWriter
from torchvision import transforms
img_path = "lianshou-dataset/train/ants_image/0013035.jpg"
img = Image.open(img_path)
writer = SummaryWriter("tensorboard-test")
# ToTensor的使用
tensor_trans = transforms.ToTensor()
img_tensor = tensor_trans(img)
writer.add_image("ToTensor", img_tensor)
# Normalize(归一化)的使用
print(img_tensor[0][0][0]) # 输出 img_tensor第一层第一行第一列的像素
trans_norms = transforms.Normalize([0.5, 0.5, 0.5], [0.5, 0.5, 0.5])
# 第一个 [0.5, 0.5, 0.5]表示均值,第二个 [0.5, 0.5, 0.5]表示标准差。之所以有三个 0.5,是因为图片是三通道的
img_norm = trans_norms(img_tensor)
print(img_norm[0][0][0]) # 输出变换后的 img_norm第一层第一行第一列的像素
writer.add_image("Normalize", img_norm)
writer.close()
运行结果如下(可以看出归一化后的图片与原始图片还是有所区别的):
13、常见的Transforms(二)
(1)Resize的使用
代码如下(建议复制到PyCharm中阅读):
from PIL import Image
from torch.utils.tensorboard import SummaryWriter
from torchvision import transforms
img_path = "lianshou-dataset/train/ants_image/0013035.jpg"
img = Image.open(img_path)
writer = SummaryWriter("tensorboard-test")
# ToTensor的使用
tensor_trans = transforms.ToTensor()
img_tensor = tensor_trans(img)
writer.add_image("ToTensor", img_tensor)
# Resize的使用
print(img.size)
trans_resize = transforms.Resize((512, 512))
# img PIL -> resize -> img_resizeA PIL
img_resizeA = trans_resize(img)
print(img_resizeA)
# img_resizeA PIL -> totensor -> img_resizeB tensor
img_resizeB = tensor_trans(img_resizeA)
writer.add_image("Resize", img_resizeB, 0)
writer.close()
运行结果如下:
可以看出,图片的尺寸由768×512变成了512×512。在可视化的结果中也可以看出Resize后图片尺寸的变化。
(2)Compose的使用
代码如下(建议复制到PyCharm中阅读):
from PIL import Image
from torch.utils.tensorboard import SummaryWriter
from torchvision import transforms
img_path = "lianshou-dataset/train/ants_image/0013035.jpg"
img = Image.open(img_path)
writer = SummaryWriter("tensorboard-test")
# ToTensor的使用
tensor_trans = transforms.ToTensor()
img_tensor = tensor_trans(img)
writer.add_image("ToTensor", img_tensor)
# Compose的使用
trans_resize = transforms.Resize(512)
# PIL -> PIL -> tensor
trans_compose = transforms.Compose([trans_resize,tensor_trans]) # 将多个转换组合在一起