TensorBoard的使用
1.Tensboard的使用
2.图像变换,Transform的使用
Transform在Dataset中很常用,主要是对图像进行变换:
比如图像要统一到一个统一的尺寸,或者对图像中的每一个数据进行一个类的转换
但是想要演示Transform的结果,那肯定要涉及到运行完一个对应的方法之后展示这个图像,最简单的方法就是用TensBoard,在训练模型过程中,在GitHub上或者文章中可以看到最常见的训练过程中Loss是如何变化的,通过Loss我们可以知道训练的过程是否按照我们预想的变化,或者说这个训练过程中是不是处于一个正常的状态,也可以从相应的Loss当中去看一下应该我们选择什么样的模型,比如训练到多少步的时候符合我们的预期
TensBoard一开始只可以在Tensorflow中才可以使用,好像在PyTorch 1.1之后加入了TensBoard,学会TensBoard对后面的训练很有帮助,包括去帮助我们有效的去探究这个模型它的不同阶段到底是如何输出的
Tab可以缩进
在py3.10中安装TensorBoard,pip install tensorboard
from torch.utils.tensorboard import SummaryWriter
writer = SummaryWriter(log_dir='logs')
for i in range(100):
writer.add_scalar("y=2x", 2*i, i)
writer.close()
Run可以看到logs文件夹,里面是tensorboard的事件文件
打开事件文件,在PyCharm的Termianl中,tensorboard --logdir=logs
有时候一台服务器有好多人训练,默认打开6006端口,如果大家都指向一个端口就很麻烦,也可以指定端口,tensorboard --logdir=logs --port=6007
Ctrl + C取消
有可能,后来每向writer中写入一些新的事件时,其实也记录了上一个事件中,删去logs下事件,关掉程序,重新开始
如何向里面写一些图像?add_image()的使用:
- 图像数据可以是 torch.Tensor、numpy.ndarray 或者字符串 / blobname,表示图像数据
- global_step是int型
- 其余的暂时不需要太关心
from PIL import Image
image_path = "data/train/ants_image/0013035.jpg"
img = Image.open(image_path)
print(type(img))
返回<class 'PIL.JpegImagePlugin.JpegImageFile'>
,如何将此类型转为tensor之后再说
先利用OpenCV读取图片,获得numpy型图片数据
在使用的环境下安装OpenCV库pip install opencv-python
讲者下载太慢,利用numpy.array(),对PIL图片进行转换:
from PIL import Image
image_path = "data/train/ants_image/0013035.jpg"
img = Image.open(image_path)
import numpy as np
img_array = np.array(img)
print(type(img_array))
返回<class 'numpy.ndarray'>
从PIL到numpy,需要在add_image()中指定shape中每一个数字/维表示的含义:
from torch.utils.tensorboard import SummaryWriter
import numpy as np
from PIL import Image
writer = SummaryWriter(log_dir='logs')
image_path = "data/train/ants_image/0013035.jpg"
img_PIL = Image.open(image_path)
img_array = np.array(img_PIL)
print(type(img_array))
print(img_array.shape)
writer.add_image('test', img_array, 1, dataformats='HWC')
writer.close()
返回:
<class 'numpy.ndarray'>
(512, 768, 3)
在terminal中输入tensorboard --logdir=logs
或者tensorboard --logdir=logs --port=6007
可以查看图片
改变图片,改变global_step,不改变tag,就会在一个窗口下展示,改变tag则可以在新窗口展示,通过这种方式,我们可以直观的观察到训练过程,给model提供了那些数据,或者想对model进行测试的时候可以看到每个阶段的输出结果,或者可以观察不同阶段的显示
原始资料地址:
TensorBoard的使用(一)
TensorBoard的使用(二)
如有侵权联系删除 仅供学习交流使用