文章目录
基于B站小土堆网课内容
一、tensorboard:张量输出板
用于展示数据集,观察训练的情况和输出
本质上是用浏览器打开本地的log文件
- 打开方式:
bash:
("??? ??? ??? ??? ??? ??? ? "处填写log的路径)
tensorboard --logdir="?????????????????????????" --port=6007'
或者 py
writer = SummaryWriter("logs")
os.system('tensorboard --logdir=logs --port=6007')
二、transform:自定义工具箱
1、作用
用于创建一个自己的工具箱,处理输入
object -> PIL Image;
- 需要tensor数据类型的原因:支持更方便的数据表示和处理方法,集成性更高
2、常见的transforms:
- PIL: image.open()
- tensor: ToTensor()
- narrays: cv2.imread()
3、normalize 标准化
公式:
input[channel] = (input[channel] - mean[channel] / std[channel] )
这行代码是图像处理或数据预处理中的一个常见步骤,用于对数据进行标准化(或归一化)处理。具体来说,它是针对图像的每个颜色通道(比如RGB图像中的红色、绿色、蓝色通道)进行操作的。这里的input[channel]
表示输入数据的第channel
个通道,mean[channel]
和std[channel]
分别表示该通道数据的平均值和标准差。
整个表达式的意思是:将输入数据的第channel
个通道的每个像素值减去该通道的平均值,然后除以该通道的标准差。这样做的目的是将数据标准化,使得处理后的数据具有相同的尺度,便于后续处理或模型训练。
标准化后的数据通常具有0均值和1标准差,有助于加快模型的收敛速度,提高模型的训练效率。此外,标准化还可以减少模型过拟合的风险,因为它使得数据分布更加稳定。
- 结果:
4、resize 压缩
- 改为500 × 500
5 随机裁剪
三、torchvision,dataloder:数据集下载和索引
test_loader = DataLoader(dataset=test_data,
batch_size=64,
shuffle=True, # shuffle的意思是打乱
num_workers=0,
drop_last=True)
tensorboard显示dataloader结果(每次load的图片):
总结
- 完整代码
# --------------- basic info --------------- *
# auther:
# time & date: 2024-07-15, 17:22
# project:
import os
# start import --- *
import math
from PIL import Image
from torch.utils.tensorboard import SummaryWriter
from torchvision import transforms
# end import ----- *
writer = SummaryWriter("logs")
img = Image.open(r'D:\Libraries\projects\python\001 learningTest and small task\a005_pytorch\dataset_002_练手数据集\imgs\airplane.png')
print(img)
# to tensor
trans_totensor = transforms.ToTensor()
img_tensor = trans_totensor(img)
writer.add_image('ToTensor', img_tensor)
# normalize
print(img_tensor[0][0][0])
# create a normalize transform toolbox
trans_norm = transforms.Normalize([3, -4, 7], [-8, -0.02, 17])
# use the toolbox
img_tensor_norm = trans_norm(img_tensor)
# print(img_tensor_norm)
print(img_tensor_norm[0][0][0])
writer.add_image('normalized', img_tensor_norm, 5)
writer.add_image('before normalized', img_tensor)
# resize
print(img.resize)
trans_resize = transforms.Resize((512, 512)) # create tool
# pil -> resize -> PIL -> ToTensor -> Tensor
img_resize = trans_resize(img)
img_resize = trans_totensor(img_resize)
writer.add_image('resize', img_resize, 0)
# compose
trans_resize_2 = transforms.Resize(512)
trans_compose = transforms.Compose([trans_resize_2, trans_totensor]) # create tool
img_resize_2 = trans_compose(img)
writer.add_image('compose', img_resize_2, 0)
# open tensorboard
# os.system('tensorboard --logdir=logs --port=6006')
# tensorboard --logdir="D:\Libraries\projects\python\001 learningTest and small task\a005_pytorch\a002_lesson_src\logs" --port=6006
writer.close()