tensorBoard的使用
- 作用:可以将训练中的每一步的数据和图像的变换以可视化的形式展示出来。
- tensorBoard 为pytorch 自带的库,安装了pytorch后可直接导入。命令:
from torch.utils.tensorboard import SummaryWriter
- tensorBoard 部分常用函数的用法:
writer=SummaryWriter(addr); 创建一个writer对象,通过该对象可以将所有通过tensorBoard处理结果写 入addr这个目录下 (addr:用户自定义路径,即通过tensorBoard处理的结果存放的位置)
writer.add_image(tag, img, global_step, dataformats="HWC") #参数依次为: tag (string类型): 图表标题 img_tensor (): 图片数据(数据类型可以是torch.Tensor, numpy.array, or string/blobname) global_step (int): 训练的次数(第几次) 图片形状:默认(通道数,高度,宽度)(CHW), 若不是默认形状则需要通过 dataformats来指定图片形状
writer.add_scalar(tag, scalar_value, global_step )
#参数依次为:
tag (string类型): 图表标题
scalar_value: 每次训练的结果数值(纵坐标),
global_step (int):训练的次数(第几次)(次数与结果一一对应)(横坐标)
4.writer.add_scalar()函数使用实例代码
from torch.utils.tensorboard import SummaryWriter
import cv2 as cv
import numpy as np
writer=SummaryWriter(r"E:\python\pythonProject_pyTorch\tensorBoard")
for i in range(100):
writer.add_scalar("y=x", 2*i, i)
writer.close()
5.运行代码后,打开pycharm终端控制台(terminal)
输入命令:
tensorboard --logdir= tensorBoard处理结果的存放路径(绝对路径)
6.点击蓝色的链接,会跳转到下图:
7.这就是将上面那个实例代码结果进行可视化处理的结果,在图上拖动鼠标,可以看到每处的具体数值变化。
8.writer.add_image()函数使用实例代码
from torch.utils.tensorboard import SummaryWriter
import cv2 as cv
import numpy as np
writer=SummaryWriter(r"E:\python\pythonProject_pyTorch\tensorBoard")
img=np.array(cv.imread(r"E:\python\pythonProject_pyTorch\dataset\train\ants_image\7759525_1363d24e88.jpg"))
#替换上面的路径
writer.add_image("images", img, 1, dataformats="HWC")
writer.close()
与上面操作一样(上述代码中的图片路径要替换为用户自备的图片的路径),最终结果:
9.用pycharm进行tensorboard的图片处理的可视化的时候,可能最后会出现图片无法显示的结果,因此,建议使用jupyter来运行代码。
常用的transform
#ToTensor
trans=transforms.ToTensor()
#创建一个格式化工厂对象(作用:将图片格式转换成tensor类型)img=Image.open(r"E:\python\pythonProject_pyTorch\dataset\train\ants_image\6743948_2b8c096dda.jpg")
#获得图片
new_img=trans(img)
#将图片img 转换成tensor类型并将结果存入new_img中
#Normalize
norm=transforms.Normalize([0.5, 0.5, 0.5], [0.5, 0.5, 0.5])
#创建一个格式化工厂对象(作用:将图片进行归一化处理)
#参数依次是归一化的均值(mean),和归一化的标准差(图片是RGB三个维度,因此每个参数位置有三个值)
img_norm=norm(new_img)
#将图片进行归一化处理并返回,图片必须是tensor类型!!!!!!
#Resize
resize=transforms.Resize((512, 512))#创建一个格式化工厂对象(作用:将图片按指定大小进行伸缩变换)
#参数:(图片宽,图片高)
img_resize=resize(new_img)
#Compose
compose=transforms.Compose([resize, trans])
#创建一个格式化工厂对象(作用:将图片按参数顺序依次变换)
#(第一个工厂的输入类型必须是PTL_Image)
#参数(必须是列表形式[……]):各个处理图片的子工厂(要求上一个工厂的最终输出类型必须满足下一个工厂输入类型的要求)
img_compose=compose(img)
#RandomCrop
randomcrop=transforms.RandomCrop((20, 20))
#创建一个格式化工厂对象(作用:在图片上按指定大小随机裁剪下一块)
#参数:(裁剪宽,裁剪高) 输入类型必须是PTL_Imageimg_randomcrop=randomcrop(img)
上述代码如下:
from PIL import Image
from torchvision import transforms
#ToTensor
trans=transforms.ToTensor() #创建一个格式化工厂对象(作用:将图片格式转换成tensor类型)
img=Image.open(r"E:\python\pythonProject_pyTorch\dataset\train\ants_image\6743948_2b8c096dda.jpg")
#获得图片
new_img=trans(img) #将图片img 转换成tensor类型并将结果存入new_img中
#Normalize
norm=transforms.Normalize([0.5, 0.5, 0.5], [0.5, 0.5, 0.5]) #创建一个格式化工厂对象(作用:将图片进行归一化处理)
#参数依次是归一化的均值(mean),和归一化的标准差(图片是RGB三个维度,因此每个参数位置有三个值)
img_norm=norm(new_img) #将图片进行归一化处理并返回,图片必须是tensor类型!!!!!!
#Resize
resize=transforms.Resize((512, 512)) #创建一个格式化工厂对象(作用:将图片按指定大小进行伸缩变换)
#参数:(图片宽,图片高)
img_resize=resize(new_img)
#Compose
compose=transforms.Compose([resize, trans]) #创建一个格式化工厂对象(作用:将图片按参数顺序依次变换)
# (第一个工厂的输入类型必须是PTL_Image)
#参数(必须是列表形式[……]):各个处理图片的子工厂(要求上一个工厂的最终输出类型必须满足下一个工厂输入类型的要求)
img_compose=compose(img)
#RandomCrop
randomcrop=transforms.RandomCrop((20, 20)) #创建一个格式化工厂对象(作用:在图片上按指定大小随机裁剪下一块)
#参数:(裁剪宽,裁剪高) 输入类型必须是PTL_Image
img_randomcrop=randomcrop(img)
```
```