首先把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’]