首先把tensorboardX导入并进行初始化:

from tensorboardX import SummaryWriter
# 定义Summary_Writer
writer = SummaryWriter('./Result')   # 数据存放在这个文件夹

基础函数

add_scalar()
add_scalar(tag, scalar_value, global_step=None, walltime=None)
在一个图表中记录一个标量的变化,常用于 Loss 和 Accuracy 曲线的记录。

add_scalars()
add_scalars(main_tag, tag_scalar_dict, global_step=None, walltime=None)
在一个图表中记录多个标量的变化,常用于对比,如 trainLoss 和 validLoss 的比较等

add_histogram()
add_histogram(tag, values, global_step=None, bins='tensorflow', walltime=None)
绘制直方图多分位数折线图,常用于监测权值及梯度的分布变化情况,便于诊断网络更新方向是否正确。

add_image()
add_image(tag, img_tensor, global_step=None, walltime=None)
绘制图片,可用于检查模型的输入,监测 feature map 的变化,或是观察 weight。
拓展:torchvision.utils.make_grid()
torchvision.utils.make_grid(tensor, nrow=8, padding=2, normalize=False, range=None, scale_each=False, pad_value=0)
将一组图片拼接成一张图片,便于可视化。

add_graph()
add_graph(model, input_to_model=None, verbose=False, **kwargs)
绘制网络结构拓扑图。

add_embedding()
add_embedding(mat, metadata=None, label_img=None, global_step=None, tag='default', metadata_header=None)
在三维空间或二维空间展示数据分布,可选 T-SNE、 PCA 和 CUSTOM 方法。

add_text()
add_text(tag, text_string, global_step=None, walltime=None)
记录文字。

add_video()
add_video(tag, vid_tensor, global_step=None, fps=4, walltime=None)
记录 video

add_figure()
add_figure(tag, figure, global_step=None, close=True, walltime=None)
添加 matplotlib 图片到图像中

add_image_with_boxes()
add_image_with_boxes(tag, img_tensor, box_tensor, global_step=None, walltime=None, **kwargs)
图像中绘制 Box,目标检测中会用到

add_pr_curve()
add_pr_curve(tag, labels, predictions, global_step=None, num_thresholds=127, weights=None, walltime=None)
绘制 PR 曲线

add_pr_curve_raw()
add_pr_curve_raw(tag, true_positive_counts, false_positive_counts, true_negative_counts, false_negative_counts, precision, recall, global_step=None, num_thresholds=127, weights=None, walltime=None)
从原始数据上绘制 PR 曲线

export_scalars_to_json()
export_scalars_to_json(path)
将 scalars 信息保存到 json 文件,便于后期使用

标量可视化与权重直方图

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) # 绘制直方图

feature map的可视化和卷积核的可视化

add_image(tag, img_tensor, global_step=None, walltime=None) # 绘制图片
torchvision.utils.make_grid(tensor, nrow=8, padding=2, normalize=False, range=None, scale_each=False, pad_value=0) # 制作网格用于显示

模型图可视化

model = torchvision.models.resnet18(False)
writer.add_graph(model, torch.rand([1,3,224,224]))   # 自己定义的网络有时显示错误

混淆矩阵及其可视化

通过混淆矩阵可以看出模型的偏好,而且对每一个类别的分类情况都了如指掌,为模型的优化提供很大帮助。

概念

混淆矩阵(Confusion Matrix)常用来观察分类结果,其是一个 N*N 的方阵, N 表示类别数。混淆矩阵的行表示真实类别,列表示预测类别。通过混淆矩阵可以清晰的看出网络模型的分类情况,若再结合上颜色可视化,可方便的看出模型的分类偏好。

统计

第一步:创建混淆矩阵
获取类别数,创建 N*N 的零矩阵conf_mat = np.zeros([cls_num, cls_num])
第二步:获取真实标签和预测标签
labels 为真实标签,通常为一个 batch 的标签。predicted 为预测类别,与 labels 同长度
第三步:依据标签为混淆矩阵计数

for i in range(len(labels)):
    true_i = np.array(labels[i])
    pre_i = np.array(predicted[i])
    conf_mat[true_i, pre_i] += 1.0

可视化

可视化还需要各类标签名,存储为一个 list,以 cifar10 为例:
classes = [‘plane’, ‘car’, ‘bird’, ‘cat’, ‘deer’, ‘dog’, ‘frog’, ‘horse’,‘ship’, ‘truck’]
可视化

摘自《Pytorch模型训练实用教程》。详情见:https://github.com/tensor-yu/PyTorch_Tutorial

相关文章: