TensorBoard是TensorFlow自带的一个强大的可视化工具,也是一个Web应用程序套件。TensorBoard目前支持7种可视化,Scalars,Images,Audio,Graphs,Distributions,Histograms和Embeddings。其中可视化的主要功能如下。
(1)Scalars:展示训练过程中的准确率、损失值、权重/偏置的变化情况。
(2)Images:展示训练过程中记录的图像。
(3)Audio:展示训练过程中记录的音频。
(4)Graphs:展示模型的数据流图,以及训练在各个设备上消耗的内存和时间。
(5)Distributions:展示训练过程中记录的数据的分部图。
(6)Histograms:展示训练过程中记录的数据的柱状图。
(7)Embeddings:展示词向量后的投影分部
在tensorboard中的SummaryWriter(pc中按住ctrl点击SummaryWriter查看)类的介绍
大概意思是,这个类是向log——dir写入日志文件,对tensorboard进行解析。
后面还有他的使用说明
开始使用
添加实例
writer = SummaryWriter("logs")
是使用两个添加方法
writer.add_image()
writer.add_scalar()
最后关闭文件
writer.close()
(1)writer.add_scalar()方法的使用
首先使用使用ctrl+/注释add_image()
打开说明
"""Add scalar data to summary.
Args:
tag (string): Data identifier
scalar_value (float or string/blobname): Value to save
global_step (int): Global step value to record
walltime (float): Optional override default walltime (time.time())
with seconds after epoch of event
new_style (boolean): Whether to use new style (tensor field) or old
style (simple_value field). New style could lead to faster data loading.
Examples::
from torch.utils.tensorboard import SummaryWriter
writer = SummaryWriter()
x = range(100)
for i in x:
writer.add_scalar('y=2x', i * 2, i)
writer.close()
Expected result:
.. image:: _static/img/tensorboard/add_scalar.png
:scale: 50 %
"""
参数:tag:图表的标题
scalar_value :对应数值(y轴)
global_step (int):训练到多少步(x轴)
例如我们尝试画出y=x的图像
from torch.utils.tensorboard import SummaryWriter
writer = SummaryWriter("logs")
# writer.add_image()
#y=x
for i in range(100):
writer.add_scalar("y=x",i,i)
writer.close()
就会在log文件夹下生成一个日志文件
打开这个日志文件
在终端(当前文件夹下)中输入命令行
tensorboard --logdir=logs
可以打开进入这个服务器打开
也可使指定这个窗口 防止与别人冲突
tensorboard --logdir=logs --port=6007
选择端口名为6007
点击连接就可以打开这个文件了
如果你再加载y=2x的函数 可能会出现过拟合的情况
想要解决这个问题你可以删除log中的文件,重新加载
官方的建议是你可以建立一个子文件存储新的函数日志
(2)add_image()的使用(观察训练结果)
打开说明
"""Add image data to summary.
Note that this requires the ``pillow`` package.
Args:
tag (string): Data identifier
img_tensor (torch.Tensor, numpy.array, or string/blobname): Image data
global_step (int): Global step value to record
walltime (float): Optional override default walltime (time.time())
seconds after epoch of event
tag:标题
img_tensor (torch.Tensor, numpy.array, or string/blobname):图像数据(y轴)
global_step:x轴
使用:
打开python控制器设置他的图片地址
导入Image包
读取图片类型看是否满足输入图片的要求
img=Image.open(image_path)
不满足输入的要求
(3)利用opencv读取图片获得numpy型图片数据
安装opencv-python后导入numpy包
import numpy as np
将img的PIL转换为np类型
img_array=np.array(img)
打印其类型 已经变成array型
开始写代码
from torch.utils.tensorboard import SummaryWriter
import numpy as np
from PIL import Image
writer = SummaryWriter("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))
writer.add_image("test",img_array,1)
#y=x
for i in range(100):
writer.add_scalar("y=2x",2*i,i)
writer.close()
运行出现错误
TypeError: Cannot handle this data type: (1, 1, 512), |u1
打开说明 查看到对于add_image有尺寸的说明
默认的是【3通道,高度,宽度 】如果是【高度,宽度,3】也可以但是需要设置dataformats
也是使用的np类型的,他的dataformats='HWC'
我们先看一下img_array的格式
print(img_array.shape)
属于第二种情况
更改代码为
from torch.utils.tensorboard import SummaryWriter
import numpy as np
from PIL import Image
writer = SummaryWriter("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')
#y=x
for i in range(100):
writer.add_scalar("y=2x",2*i,i)
writer.close()
在终端输入
tensorboard --logdir=logs --port=6007
点击链接 再点击左上角的images就出现了图像了
如果想再添加蜜蜂 修改地址 将 add_image的步骤改为2
from torch.utils.tensorboard import SummaryWriter
import numpy as np
from PIL import Image
writer = SummaryWriter("logs")
image_path="data/train/bees_image/16838648_415acd9e3f.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,2,dataformats='HWC')
#y=x
for i in range(100):
writer.add_scalar("y=2x",2*i,i)
writer.close()
拖动就可以实现步骤1和步骤2的转换了