pytorch入门-TensorBoard和Transforms

TensorBoard 

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


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

# 就对路径 = D:\PyCharm\learn_torch\dataset\train\ants_image\0013035.jpg
# 相对路径 = dataset\train\ants_image\0013035.jpg
img_path = r"dataset\train\ants_image\0013035.jpg"
img_path_abs = r"D:\PyCharm\learn_torch\dataset\train\ants_image\0013035.jpg"

img = Image.open(img_path)
writer = SummaryWriter("logs")
# print(img)

# 1. transforms该如何使用(python)
tensor_trans = transforms.ToTensor()
tensor_img = tensor_trans(img)
# print(tensor_img)

writer.add_image("Tensor_img", tensor_img)

writer.close()

 Transform

from PIL import Image#from PIL import Image 是正确导入PIL(Python Imaging Library)包中的 Image 模块的方式。通过这个导入语句,你可以使用 Image 模块进行各种图像操作,如打开、操作和保存图像。
from torch.utils.tensorboard import SummaryWriter#torch.utils.tensorboard 模块提供了在 PyTorch 中使用 TensorBoard 的功能。在这个模块中,SummaryWriter 类是用于创建和管理 TensorBoard 日志的关键类。
from torchvision import transforms #torchvision.transforms 模块是 PyTorch 提供的图像预处理工具集,它提供了各种常用的图像预处理操作和转换器。通过导入 transforms 模块,你可以使用其中的转换器来对图像进行常见的预处理操作,如缩放、裁剪、旋转、翻转、标准化等。

writer = SummaryWriter("logs") #SummaryWriter("logs") 是一个用于创建 TensorBoard 的 SummaryWriter 对象的函数。它接受一个可选的参数,表示 TensorBoard 日志文件的保存路径。
img = Image.open(r"练手数据集\val\bees\6a00d8341c630a53ef00e553d0beb18834-800wi.jpg")#代码中的 Image.open 是 PIL 库中的一个函数,用于打开图像文件。它接受一个参数,表示要打开的图像文件路径。
print(img)

# ToTensor ToTensor 是一个常用的数据转换操作,用于将 PIL 图像或 NumPy 数组转换为 PyTorch 的张量(tensor)。
trans_totensor = transforms.ToTensor()# 定义 ToTensor 转换
img_tensor = trans_totensor(img)# 将图像转换为张量
writer.add_image("ToTensor", img_tensor)#writer.add_image 是一个用于将图像添加到 TensorBoard 可视化的函数。通过传递一个图像张量给这个函数,你可以在 TensorBoard 中观察、比较和分析图像数据。

# Normalize Normalize 是一个常用的数据转换操作,用于将张量中的数值进行标准化。标准化可以使数据在一定范围内进行缩放,并且具有零均值和单位方差。
print(img_tensor[0][0][0])#显示标准化后的图像张量中的某个像素的值
trans_norm = transforms.Normalize([0.5, 0.5, 0.5],[0.5, 0.5, 0.5])#创建了一个 Normalize 类型的转换器 trans_norm。这个转换器可以将图像张量进行标准化,使其均值为 0.5,标准差为 0.5。   # 定义标准化转换
img_norm = trans_norm(img_tensor)# 进行标准化
print(img_norm[0][0][0])
writer.add_image("Normalize", img_norm)

#  Resize 是一个常用的图像预处理操作,它用于调整图像的尺寸。通过 Resize 操作,你可以将图像调整为特定的宽度和高度,或者按比例缩放。
print(img.size)
trans_resize = transforms.Resize((512,512)) #通过 transforms.Resize() 创建了一个名为 trans_resize 的转换器,将图像的尺寸调整为 (512, 512)。
# img PIL -> resize -> img_resize PIL
img_resize = trans_resize(img) # 将转换器应用到图像上
# img_resize PIL -> totensor -> img_resize totensor
img_resize = trans_totensor(img_resize)#将经过 transforms.Resize() 转换器调整大小后的图像 img_resize 转换为张量。
writer.add_image("Resize",img_resize,0)

print(img_resize)


# compose - resize - 2 #transforms.Compose 是 torchvision.transforms 模块中的一个函数,用于将多个图像预处理操作串联在一起形成一个组合转换器。
trans_resize_2 = transforms.Resize(512)
# PIL -> PIL -> tensor
trans_compose = transforms.Compose([trans_resize_2, trans_totensor])#是一个 PyTorch 中的图像转换函数,用于将多个图像转换操作组合在一起,以便同时应用于图像数据
img_resize_2 = trans_compose(img)
writer.add_image("Resize",img_resize_2,1)


# RandomCrop transforms.RandomCrop 是 torchvision.transforms 模块中的一个转换器,用于随机裁剪图像。
trans_random = transforms.RandomCrop(512)# 定义随机裁剪转换器
trans_compose_2 = transforms.Compose([trans_random, trans_totensor])#创建一个组合转换器 trans_compose_2,其中包含两个转换器 trans_random 和 trans_totensor。
for i in range(10):
    img_crop = trans_compose_2(img)## 应用组合转换器
    writer.add_image("RandomCrop", img_crop,i)

writer.close()

torchvision数据集的使用

import torchvision
from torch.utils.tensorboard import SummaryWriter

dataset_transform = torchvision.transforms.Compose([
    torchvision.transforms.ToTensor()
])

train_set = torchvision.datasets.CIFAR10(root="./dataset",train=True,transform=dataset_transform, download=True)
test_set = torchvision.datasets.CIFAR10(root="./dataset",train=False,transform=dataset_transform, download=True)

# print(test_set[0])
# print(test_set.classes)
#
# img,target = test_set[0]
# print(img)
# print(target)
# print(test_set.classes[target])
# img.show()
# print(test_set[0])

writer = SummaryWriter("p10")
for i in range(10):
    img, target = test_set[i]
    writer.add_image("test_set", img, i)

writer.close()

dataloader的使用 

import torchvision

#准备测试数据集
from torch.utils.data import DataLoader#通过使用DataLoader,您可以自动将数据集分成小的批次,这对于训练深度学习模型非常重要。DataLoader还提供了多线程数据加载和预取功能,以提高数据加载的效率。
from torch.utils.tensorboard import SummaryWriter

test_data = torchvision.datasets.CIFAR10("./dataset", train=False, transform=torchvision.transforms.ToTensor())#这行代码使用torchvision.datasets.CIFAR10函数创建了一个test_data对象,表示CIFAR-10数据集的测试集。该数据集包含图像和相应的标签,用于评估模型的性能。
# 代码中的参数如下所示:
# "./dataset":指定数据集文件存储的路径。可以根据自己的需要进行更改。
# train=False:表示加载的是测试集,而不是训练集。
# transform=torchvision.transforms.ToTensor():指定了数据集的转换操作,将图像转换为Tensor类型。

test_loader = DataLoader(dataset=test_data, batch_size=64, shuffle=True, num_workers=0, drop_last=False)#这行代码创建了一个名为test_loader的数据加载器,用于加载测试数据集。
# 参数解释如下:
# dataset=test_data:指定要加载的数据集对象,这里是test_data,即CIFAR-10的测试集数据。
# batch_size=64:指定每个批次的大小为64,即每次加载64个样本。
# shuffle=True:表示在每个epoch开始时是否打乱数据集的顺序。这里将数据打乱以增加随机性。
# num_workers=0:指定用于数据加载的子进程数量。默认为0,表示只使用主进程进行数据加载。
# drop_last=False:指定是否丢弃最后一个不完整的批次。这里设置为False,表示即使最后一个批次样本数量不足64个,也要加载。


# 测试数据集中第一张图片及target
img, target = test_data[0]#返回的img变量将包含图像数据,而target变量将包含该图像对应的标签。
print(img.shape)
print(target)


#遍历test_loader数据加载器中的所有批次,并将批次中的图像数据添加到SummaryWriter对象中,以便在TensorBoard中可视化。

# 在每个epoch中的每个批次中,它执行以下操作:
# 
# 从test_loader加载器中获取一个批次的数据,包括图像和相应的标签,通过for data in test_loader: img, targets = data这行代码实现。
# 
# 利用writer.add_images方法,将当前批次的图像添加到TensorBoard中。这行代码使用了"Epoch:{}"作为标题,其中的epoch变量表示当前的epoch数。img是当前批次的图像数据,step用于标识每个批次的索引。
# 
# 更新step的值,以进行下一个批次的计数。
writer = SummaryWriter("dataloader")
for epoch in range(2):
    step = 0
    for data in test_loader:
        img,targets = data
        # print(img.shape)
        # print(targets)
        writer.add_images("Epoch:{}".format(epoch),img,step)
        step = step +1

writer.close()

你可能感兴趣的:(pytorch,人工智能,python)