文章目录
- 安装目标:pytorch1.2.0+tensorboard1.14
- 当前环境:
- ubuntu16.04
- 已安装有tensorflow1.11(内部集成有tensorboard)
- python环境为anaconda,3.6版本
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
tensorboard
- torch.utils.tensorboard.writer.SummaryWriter
- torch.utils.tensorboard.writer.SummaryWriter.init
- torch.utils.tensorboard.writer.SummaryWriter.add_audio
- torch.utils.tensorboard.writer.SummaryWriter.add_custom_scalars
- torch.utils.tensorboard.writer.SummaryWriter.add_embedding
- torch.utils.tensorboard.writer.SummaryWriter.add_figure
- torch.utils.tensorboard.writer.SummaryWriter.add_graph
- torch.utils.tensorboard.writer.SummaryWriter.add_histogram
- torch.utils.tensorboard.writer.SummaryWriter.add_image
- torch.utils.tensorboard.writer.SummaryWriter.add_images
- torch.utils.tensorboard.writer.SummaryWriter.add_mesh
- torch.utils.tensorboard.writer.SummaryWriter.add_pr_curve
- torch.utils.tensorboard.writer.SummaryWriter.add_scalar
- torch.utils.tensorboard.writer.SummaryWriter.add_scalars
- torch.utils.tensorboard.writer.SummaryWriter.add_text
- torch.utils.tensorboard.writer.SummaryWriter.add_video
- torch.utils.tensorboard.writer.SummaryWriter.close
- torch.utils.tensorboard.writer.SummaryWriter.flush
常用记录函数
在训练过程中经常使用的有:add_scalar,add_histogram, add_graph
下面将着重讲解这几个函数用法。。
add_graph
add_graph(model, input_to_model=None, verbose=False)
添加网络结构图
- 参数
- 网络模型
- 一个输入样本实例
- verbose: 控制是否打印网络结构的开关语句
add_image
add_image(*tag*, *img_tensor*, *global_step=None*, *walltime=None*, *dataformats='CHW'*)
Add image data to summary.
Note that this requires the
pillow
package.
参数
- tag: 数据标识名
- img_tensor: 图像输入
- global_step: 全局步长值
形状:
- 默认输入形状为(3,H,W),但如果输入图像为(H,W,3),(H,W),(1,H,W)之类的形状的话,需要指定
dataformats
参数为HWC,HW,CHW
以正确显示图像例子
im = np.random.rand(2,4) writer.add_image('images/test',im,0,dataformats='HW')
add_images
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
add_figure(tag, figure, global_step=None, close=True, walltime=None)
对于matplotlib图像对象,可以使用该函数直接输出,其用法与
add_images
基本类似
- 参数
- close: 在输出图片后自动关闭fig对象,默认为真
add_scalar
add_scalar(tag, scalar_value, global_step=None, walltime=None)
添加标量
参数
- tag: 数据标识名
- scalar_value: 标量值
例子
from torch.utils.tensorboard import SummaryWriter import numpy as np writer = SummaryWriter() for n_iter in range(100): writer.add_scalar('Loss/train', np.random.random(), n_iter)
add_scalars
add_scalars(main_tag, tag_scalar_dict, global_step=None, walltime=None)
添加多个标量
需要注意的是,该函数会将所记录的函数保存在内存中,极端情况下它可能会耗尽内存资源
参数
- main_tag:主标签
- tag_scalar_dict: 由标签与值构成的字典
例子
from torch.utils.tensorboard import SummaryWriter writer = SummaryWriter() r = 5 for i in range(100): writer.add_scalars('run_14h', {'xsinx':i*np.sin(i/r), 'xcosx':i*np.cos(i/r), 'tanx': np.tan(i/r)}, i) writer.close()
add_histogram
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
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
add_text(tag, text_string, global_step=None, walltime=None)
添加文字
参数
- text_string: 想要显示的文字
例子
writer.add_text('lstm', 'This is an lstm', 0)
add_embedding
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
实验中会输出众多图表,为便于理解,我们可以将图表划分为不同类型。
这通过将数据标识名tag命名为aa/bb
形式实现。例如Loss/train
跟Loss/test
将会被划归Loss
一个组别,而与Accuracy/train
区分开显示
global_step
全局步数,也就是当前网络的训练步数,显示在图中也就是其横坐标。
walltime
Optional override default walltime (time.time()) with seconds after epoch of event
为 event 文件的文件名设置时间,默认为 time.time()
来源:https://blog.csdn.net/u010137742/article/details/100995994