pytorch官网教程使用如下命令安装tensorboard
pip install tb-nightly
tensorboard --logdir=runs
但由于老版本的tensorflow没有卸载,故会引起冲突,之所以会引起冲突是因为tensorboard优先检索是否安装有tensorflow,如果有,则会使用tensorflow提供的函数集,如果没有安装则使用自带的精简函数集。而当tensorflow与tensorboard版本不匹配或者tensorflow卸载不完整时,tensorboard检索到tensorflow,并用其作为函数集,但当运行时才发现其中的各种函数接口不匹配,或者直接没有,故而引起各种问题报错。
首先卸载tensorflow(不建议将tensorflow跟pytorch都安装到系统环境中,可以使用docker或者conda环境):(因为我的系统python默认使用anaconda,并且anaconda安装在当前用户/home/user/下,而非系统/usr/local/下,故不需要使用sudo前缀)
pip uninstall tensorflow-gpu
这时候在终端中进入python,输入import tensorflow
会发现tensorflow依然能导入,但各种函数都不不能使用,这是因为tensorflow这个文件夹还存在于path-to/anaconda3/lib/python3.6/site-packages/
中,需要进入到该路径删除整个tensorflow文件夹
之后再执行官网教程命令即可安装tensorboard
在训练过程中经常使用的有:add_scalar,add_histogram, add_graph
下面将着重讲解这几个函数用法。。
add_graph(model, input_to_model=None, verbose=False)
添加网络结构图
- 参数
- 网络模型
- 一个输入样本实例
- verbose: 控制是否打印网络结构的开关语句
add_image(*tag*, *img_tensor*, *global_step=None*, *walltime=None*, *dataformats='CHW'*)
Add image data to summary.
Note that this requires the
pillow
package.
add_images(tag, img_tensor, global_step=None, walltime=None, dataformats='NCHW')
添加一批图像
- 参数
- dataformats: 输入图像数据的维度形式:NCHW, NHWC, CHW, HWC, HW, WH
- 形状
- 默认为(N,3,H,W),对于其他形状的,需要在dataformats中指定
add_figure(tag, figure, global_step=None, close=True, walltime=None)
对于matplotlib图像对象,可以使用该函数直接输出,其用法与
add_images
基本类似
- 参数
- close: 在输出图片后自动关闭fig对象,默认为真
add_scalar(tag, scalar_value, global_step=None, walltime=None)
添加标量
add_scalars(main_tag, tag_scalar_dict, global_step=None, walltime=None)
添加多个标量
需要注意的是,该函数会将所记录的函数保存在内存中,极端情况下它可能会耗尽内存资源
add_histogram(tag, values, global_step=None, bins='tensorflow', walltime=None, max_bins=None)
添加直方图
参数
- values: 一个张量或数组
- bins: 设定柱状图样式
例子
from torch.utils.tensorboard import SummaryWriter import numpy as np writer = SummaryWriter() for i in range(10): x = np.random.random(1000) writer.add_histogram('distribution centers', x + i, i) writer.close()
add_pr_curve(tag, labels, predictions, global_step=None, num_thresholds=127, weights=None, walltime=None)
添加精度召回曲线。通过画精度召回曲线让人知道在不同阈值下模型的表现。该函数需要提供ground truth以及预测置信度(通常就是网络输出)
参数
- labels: ground truth
- predictions:分类正确置信度,值在[0,1]之间
- num_thresholds: 曲线阈值
例子
from torch.utils.tensorboard import SummaryWriter import numpy as np labels = np.random.randint(2, size=100) # binary label predictions = np.random.rand(100) writer = SummaryWriter() writer.add_pr_curve('pr_curve', labels, predictions, 0) writer.close()
add_text(tag, text_string, global_step=None, walltime=None)
添加文字
参数
- text_string: 想要显示的文字
例子
writer.add_text('lstm', 'This is an lstm', 0)
add_embedding(mat, metadata=None, label_img=None, global_step=None, tag='default', metadata_header=None)
使用如T-sne, pca等算法将高维数据映射到低维
参数
- mat:(N,D),每一行是数据点的特征向量
- metadata: 数据标签组成的list,长度N
- label_img: 在映射后空间中展示的图片,形状为(N,C,H,W)
例子
from torch.utils.tensorboard import SummaryWriter import numpy as np writer = SummaryWriter() dataset = datasets.MNIST('mnist', train=False, download=True) images = dataset.test_data[:100].float() label = dataset.test_labels[:100] features = images.view(100, 784) writer.add_embedding(features, metadata=label, label_img=images.unsqueeze(1))
实验中会输出众多图表,为便于理解,我们可以将图表划分为不同类型。
这通过将数据标识名tag命名为aa/bb
形式实现。例如Loss/train
跟Loss/test
将会被划归Loss
一个组别,而与Accuracy/train
区分开显示
全局步数,也就是当前网络的训练步数,显示在图中也就是其横坐标。
Optional override default walltime (time.time()) with seconds after epoch of event
为 event 文件的文件名设置时间,默认为 time.time()