pytorch初识(2)—— Tensorboard,Transform

一、Tensorboard

功能:展示 transform 的运行结果

涉及到的方法和类如下所示:

1.1、SummaryWriter

1.1.1、定义
class SummaryWriter(object):
    """Writes entries directly to event files in the log_dir to be
    consumed by TensorBoard.

    The `SummaryWriter` class provides a high-level API to create an event file
    in a given directory and add summaries and events to it. The class updates the
    file contents asynchronously. This allows a training program to call methods
    to add data to the file directly from the training loop, without slowing down
    training.
    """

函数大概作用时:这个类可以直接向 log_dir 文件夹写入事件,供 Tensorboard 使用,这个类包含的函数如下所示:

def __init__(self, log_dir=None, comment='', purge_step=None, max_queue=10,
                 flush_secs=120, filename_suffix=''):

就是当你运行这个类的时候,就会需要你新建一个文件夹,也就是 log_dir=None 这个步骤,不修改 None也即不输入名字,就会默认在runs/**CURRENT_DATETIME_HOSTNAME** 这个位置。后面 comment 参数 None时默认无效,它是用来在名字后面加后缀的。

1.1.2、使用方法

writer = SummaryWriter(),这就是 log_dir=None 的,存储在默认地址

writer = SummaryWriter("my_experiment"),这就是写了地址的,文件夹就会叫 my_experiment

writer = SummaryWriter(comment="LR_0.1_BATCH_16"),LR 是对用的学习速率,batch 是对应的 batchsize,这些都是一些细节信息,名字输出就是:runs/May04_22-14-54_s-MacBook-Pro.localLR_0.1_BATCH_16/

1.1.3、包含的方法

add_scalar:

功能:添加数据到集合中

源码如下:

def add_scalar(
        self,
        tag,  # 添加横纵坐标,图片标题
        scalar_value,  # 需要保存的数值,对应输出图表的 Y 轴
        global_step=None,  # 多少步:训练到多少步时数值时多少,对应输出图表的 X 轴
        walltime=None,   # 基本是默认的
        new_style=False,  # 基本是默认的
        double_precision=False,  # 基本是默认的
    ):

e.g:

实例:

from torch.utils.tensorboard import SummaryWriter

writer = SummaryWriter('logs')  # 创建一个名为 logs 的文件夹

for i in range(100):
    writer.add_scalar("y=x", i , i)
    # 参数说明:(”函数“,x轴变量,y轴变量)  第一个”函数“只是个字符,真正的功能要后面的 i 来实现

    writer.close()

这样就会多出来一个 logs 文件,接下来就是怎么读文件里的图片:

在终端输入 tensorboard --logdir=logs,logdir:事件文件所在文件夹名称

然后 tensorboard 就会弹出窗口,给一个端口可以点进去

(pytorch) F:\pycharm\text>tensorboard --logdir=logs
TensorFlow installation not found - running with reduced feature set.
Serving TensorBoard on localhost; to expose to the network, use a proxy or pass --bind_all
TensorBoard 2.11.0 at http://localhost:6006/ (Press CTRL+C to quit)

但是,如果端口别人再用可以用以下方式修改打开端口:

(pytorch) F:\pycharm\text>tensorboard --logdir=logs --port=6007
TensorFlow installation not found - running with reduced feature set.
Serving TensorBoard on localhost; to expose to the network, use a proxy or pass --bind_all
TensorBoard 2.11.0 at http://localhost:6007/ (Press CTRL+C to quit)

add_iamge:

功能:图片可视化

源码如下:

def add_image(self,
                tag,   # 标题
                img_tensor,   # 这里需要的数据类型:torch.Tensor, nummpy.array, string/blobname
                global_step=None, walltime=None, dataformats='CHW'):

实例:

from torch.utils.tensorboard import SummaryWriter
import numpy as np  # 图片格式 :numpy.array
from PIL import Image  # 获得图片  PIL是pillow库

writer = SummaryWriter('log')  # 创建一个名为 logs 的文件夹
img_path = 'F:\\pycharm\\text\\datasize\\train\\ants\\0013035.jpg'  # 获取图片路径
img_PIL = Image.open(img_path)  # 打开图片为PIL格式
img_array = np.array(img_PIL)   # 将图片PIL格式转化为 torch.tensor 格式

writer.add_image('test',img_array, 1, dataformats='HWC')
#括号里的 1 ,是 step,是步数的意思,同一个 tag 下不同照片的 steps 是不一样的
for i in range(100):
    writer.add_scalar("y=x", i , i)
    # 参数说明:(”函数“,x轴变量,y轴变量)  第一个”函数“只是个字符,真正的功能要后面的 i 来实现

writer.close()

img_tensor 对形状是有要求的,默认的时 (3,H,W)即通道为3,后面是高和宽,不是的话,例如上面,需要加上 "dataformats='HWC'",这里的”HWC“也可以换,还有:CHW,HWC,HW

二、Transform

功能:对图像进行变换,例如统一尺寸,数据类转换,具体需要看里面的类


插播:tensor 数据类型,包装了反向神经网络所需要的参数


使用方法:

from torch.utils.tensorboard import SummaryWriter
from torchvision import transforms
from PIL import Image   # PIL 的图片读取方式
import cv2
import numpy
img_path = "F:\\pycharm\\text\\datasize\\train\\ants\\0013035.jpg"
img = Image.open(img_path)  
# cv_img = cv2.imread() cv2读图片的方式

writer = SummaryWriter('tags')

tensor_trans = transforms.ToTensor()  # 从transforms中选一个 class,创建实例,这里选的是 ToTensor
tensor_img = tensor_trans(img)  # 将 img 图片转化为 tensor

writer.add_image(tensor_img)
writer.close()

三、常见的 Transforms

读图片方法

PIL

Image.open()

tensor

ToTensor()

narrays

cv.imread()

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

writer = SummaryWriter('logs')  # 引用 tensorboard 里的 SummaryWriter 函数
img = Image.open('F:\\pycharm\\text\\datasize\\train\\ants\\0013035.jpg')
print(type(img))  # 输出:<class 'PIL.JpegImagePlugin.JpegImageFile'>

# ToTensor 方法
trans_tensor = transforms.ToTensor()  # 实例引用
img_tensor = trans_tensor(img)  # 图片通过 ToTensor 变成 tensor
print(type(img_tensor))  # 输出:<class 'torch.Tensor'>

writer.add_image('ToTensor',img_tensor)  # 将图片用SummaryWriter里的add_image方法读出来

# Normalize
print(img_tensor[0][0][0]) # 第0层,第0行,第0列
trans_norm = transforms.Normalize([0.5, 0.5, 0.5],[0.5, 0.5, 0.5])  # 这个方法需要输入三个平均值三个标准差
# 计算公式:output[channel] = (input[channel] - mean[channel]) / std[channel]
img_norm = trans_norm(img_tensor)
print(img_norm[0][0][0])
writer.add_image('normalize', img_norm)


# resize  进行等比缩放,不改变宽高比例,只改变最小边最大边之间的关系(图片会变形)
print(img.size)
trans_size = transforms.Resize((512, 512))  # 将图片变成 512*512
img_resize = trans_size(img)  # 指定是那张图片
print(img_resize)
img_resize_totensor = trans_tensor(img_resize)  # 这里PIL变成ToTensor
writer.add_image('Resize', img_resize_totensor,0)


# compese resize 用法2  这个就是等比放大
trans_size_2 = transforms.Resize(512)
trans_compose = transforms.Compose([trans_size_2, trans_tensor])
# 后面一个需要的输入和前面一个的输出一定要是同一种数据类型
img_resize_2 = trans_compose(img)
writer.add_image("resize",img_resize_2)

# Randomcrop
trans_randomcrop = transforms.RandomCrop(300)
img_randomcrop = transforms.Compose([trans_randomcrop, trans_tensor])
for i in range(10):
    img_crop = img_randomcrop(img)
    writer.add_image('randomcrop', img_crop, i)
writer.close()

以上是 ToTensor、Normalize、Resize、Randomcrop的用法


插播:


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值