Pytorch学习日记01-TensorBoard与Transforms的使用

课程内容来自于B站小土堆视频仅作为自己总结使用。
其主要目的是用,另外就是养成看源码的习惯,了解输入内容及输出内容。关注函数参数内容。

TensorBorder的使用

 自己的理解就是一个简单的展示工具。将一些函数绘画出来。或一些图片进行展示出来。
 主要的使用的函数为:add_scalar和add_image

使用方法示例:

from torch.utils.tensorboard import SummaryWriter
import numpy as np
from PIL import Image

""""
    干啥用的啊---
        - 用于绘画出函数图像和所要展示的图片
        - 使用一种类似与flask客户端的页面进行展示,且部分内容可调节
    如何使用呢?
        - 需要使用tensorboard中的summaryWriter类进行划定生成的文件名称  
        - 画图即利用 add_scalar()进行绘图。第一个参数代表你要在那个标签图中绘画。后面紧跟着y,x坐标
        - 展示图片需要利用add_image()第一个参数同样是设定图片展示格子。第二个参数必须指定为numpy图像类型。所以需要打开图片后转换格式。
            -第三参数为当前格子的图片索引值。第四个参数为:调换通道数。如果是xy3与3xy是不同的需要调换
"""

writer = SummaryWriter("logs")
image_path = "../data/train/ants_image/0013035.jpg"
img_PIL = Image.open(image_path)
img_array = np.array(img_PIL)
print(img_array.shape)
writer.add_image("test", img_array, 1, dataformats='HWC')

x = range(100)
for i in x:
    writer.add_scalar('y=3x', 3 * i, i)
writer.close()

运行截图为:

  • 程序运行会生成相应标签文件夹和文件
  • 使用cmd命令行运行这个文件夹,激活conda环境运行该命令 tensorboard --logdir=logs 使用相对位置请找准当前控制台所在位置。若没有运行结果可将logs替换成绝对地址。
  • 运行

图像与绘图

TensorForm的使用

  主要负责图像的初始化处理,像改变图像大小、归一化处理图像、图像存储格式变化及组合变化。
  主要使用的类工具有:ToTensor、Normalize、Resize、Compose
使用示例如:

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

"""
    transform所有工具的使用前都要先创建一个变化格式工具。 img是变化前的图像数据;img_trans_是变化后图像数据。
    比如文件格式变化工具需要先声明  PIL转成tensor格式才能展示在body上  
        trans_type_tool=transforms.ToTensor()
        img_trans_type=trans_type_tool(img)
    再比如变化大小   声明大小变化器
        trans_size_tool=transforms.Resize((512,512))
        img_trans_size=trans_size_tool(img)
    归一化处理器  这个操作的是Tensor类型的数据
        trans_norm_tool=transforms.Normalize([均值],[方差])
        img_trans_norm=trans_norm_tool(img_trans_type)
    工具顺序打包 Compose()  compose就是组合的意思将一些工具组合在一起
        trans_compose_tool = transforms.Compose([trans_size_tool, trans_type_tool])
        上述代码就是生成一个组合工具包,他会对图像先进行一个大小的改变,然后进行格式转化成tensor。
        两者的顺序不能改变?因为大部分的transforms工具都是对PIL Image or numpy.ndarray这两种类型的操作。
        工具包是顺序执行,在执行完格式转化后讲无法进行其他变化。
        img_trans_compose = trans_compose_tool(img)
"""

# 1、配置tensorboard  导入summarywriter并创建书写类。
writer = SummaryWriter("logs")
# 2、导入所要显示的图片内容,并进行格式转换。Totensor使用
img = Image.open("../data/train/ants_image/0013035.jpg")

trans_type_tool = transforms.ToTensor()
img_trans_type = trans_type_tool(img)
writer.add_image("ToTensor", img_trans_type)

# 3、规一划处理,normalize
print("第一个参数初始"+str(img_trans_type[0][0][0]))
trans_norm_tool = transforms.Normalize([0.5, 0.5, 0.5], [0.5, 0.5, 0.5])
img_trans_norm = trans_norm_tool(img_trans_type)
print("第一个参数归一化后"+str(img_trans_norm[0][0][0]))
writer.add_image("Normalize",img_trans_norm)

# 4、Resize
print("初始图像大小:"+str(img.size))
trans_size_tool = transforms.Resize((512, 512))
img_trans_size = trans_size_tool(img)
print("变化后1图像大小:"+str(img_trans_size.size))
# 将PIL类型-》tensor
img_trans_size = trans_type_tool(img_trans_size)
writer.add_image("Resize",img_trans_size)

# 5、Compose - resize
trans_resize_2 = transforms.Resize(512)  # 这是指定变换方法
trans_compose = transforms.Compose([trans_resize_2, trans_type_tool])
img_resize_2 = trans_compose(img)
writer.add_image("Compose-resize", img_resize_2)

# 6、RandomCrop 随机裁剪
trans_RandomCrop_tool = transforms.RandomCrop(512)
# 使用组合方式进行操作 单个数值则X*X  双数则X*Y
trans_compose_tool = transforms.Compose([trans_RandomCrop_tool, trans_type_tool])
for i in range(10):
    img_trans_rc = trans_compose_tool(img)
    writer.add_image("RandomCrop", img_trans_rc,i)
writer.close()

运行结果:
参数结果
实验结果
随机裁剪

–注:解释为啥归一化的代码需要传入Tensor类型。可以观看源码程序,该类继承了一个class Normalize(torch.nn.Module):
  所以当一个类继承了torch.nn.Module,并且没有显式定义__call__方法时,Python会沿着继承链往上寻找__call__方法,直到找到torch.nn.Module中定义的__call__方法。因此,按照函数的方式调用这个类的实例时,实际上会执行torch.nn.Module中的__call__方法,这将触发模型的前向传播过程。需要观察forward前向传播函数内的参数情况。
示例:
normal的需要一个tensor
在这里插入图片描述
RandomCrop需要一个PIL或Tensor都可以
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值