python seaborn显示的热力图中科学技术法怎么改成普通数值+怎样用深度学习数据画热力图

省流:heatmap参数中加入fmt='.0f’即可,即:

import seaborn as sns
# C2是一个混淆矩阵
sns.heatmap(C2, annot=True, ax=ax,fmt='.0f')  # Draw a heat map

接下来第二个问题,怎样在热力图上呈现深度学习的数据呢?有时候我们会进行GPU上的张量计算,所以要使之转化为普通的列表或数值,需要做一定处理,完整代码如下,下面先给一些细节解释:
其中参数前两个都是深度神经网络结构,loader是pytorch的dataloader,mode是图片标题。
.eval()是用于模型使用时防止batch normalization和dropout层出意外,没有的话不写没问题。
labels.numpy()可以让原本属于tensor的labels变成numpy数组
np.hstack可以让第二个列表从上一个列表的最后一个元素插入,如[1,2,3]、[4,5,6]经此操作后变成[1,2,3,4,5,6]
preds.max(1)[1]意义请参考我以前写的一篇文章《pytorch ADDA代码学习》,.cpu()可以让其从gpu上的张量变为cpu上的
其他还有不理解的,百度搜即可,都是很常见的操作。

def draw_confusion_matrix(encoder,classifier,loader,mode,file_name):
    sns.set()
    f, ax = plt.subplots()
    y_true = []
    y_pred = []
    encoder.eval()
    classifier.eval()
    with torch.no_grad():
        for data,labels in loader:
            data = load_gpu(data)
            # 把原始标签放入y_true列表中
            y_true = np.hstack((y_true,labels.numpy()))
            preds = classifier(encoder(data))
            # 把预测标签放入y_pred列表中
            y_pred = np.hstack((y_pred,preds.max(1)[1].cpu().numpy()))

    C2 = confusion_matrix(y_true, y_pred, labels=[0, 1, 2, 3, 4, 5, 6])
    print(C2)
    sns.heatmap(C2, annot=True, ax=ax,fmt='.0f')  # Draw a heat map
    ax.set_title('confusion matrix')  # Title
    ax.set_xlabel('predict')  # x axis
    ax.set_ylabel('true')  # y axis
    plt.title(mode)
    # 要先save再show,不然保存的是一张空图片,因为show完后创建了个新的空白图片
    plt.savefig(os.path.join(params.img_root, '{}.jpg'.format(file_name)))
    plt.show()

你可能感兴趣的:(pytorch,深度学习)