Python 使用heatmap画热力图 + keras中间层输出

heatmap

放到开始,官方文档:http://seaborn.pydata.org/generated/seaborn.heatmap.html#seaborn.heatmap

seaborn

函数是seaborn包的,同时seaborn也是基于matplotlib的画图模块,所以都需要及进行引用。使用前需要set()一下。

import seaborn as sns  
import matplotlib.pyplot as plt  
sns.set(style="white", palette="muted", color_codes=True)     
#set( )设置主题,调色板更常用  没有要求可直接sns.set()
plt.plot(np.arange(10))  
plt.show()  

混淆矩阵

Python混淆矩阵的使用
confusion_matrix函数的使用

官方文档中给出的用法是
sklearn.metrics.confusion_matrix(y_true, y_pred, labels=None, sample_weight=None)

y_true: 是样本真实分类结果,y_pred: 是样本预测分类结果
labels:是所给出的类别,通过这个可对类别进行选择
sample_weight : 样本权重
(原文https://blog.csdn.net/xyisv/article/details/80456649 )
也可以参考https://blog.csdn.net/m0_38061927/article/details/77198990

from sklearn.metrics import confusion_matrix

y_true = [2, 1, 0, 1, 2, 0]
y_pred = [2, 0, 0, 1, 2, 1]

C=confusion_matrix(y_true, y_pred)
print(C, end='\n\n')


y_true = ["cat", "ant", "cat", "cat", "ant", "bird"]
y_pred = ["ant", "ant", "cat", "cat", "ant", "cat"]
C2 = confusion_matrix(y_true, y_pred, labels=["ant", "bird", "cat"])
print(C2)

上面是一个最简单的实现,函数要求两个输入向量均为list,有需要的话注意进行转换。

画热力图

语句

ax = sns.heatmap(C, cmap=plt.cm.Blues)#画热力图,cmap表示设定的颜色集

具体颜色集可参考链接
https://blog.csdn.net/guduruyu/article/details/60868501

我选择了Blues颜色集

函数化

组装了一个函数:

def plot_heatmap(model,X_train, Y_train,nb_class):#画热力图函数
    Y_train_out = model.predict(X_train)#利用训练好的模型做预测
    Y_train_outclass = np.argmax(Y_train_out, axis=1)#找到预测结果的最大下标位置
    Y_train_class = np.argmax(Y_train, axis=1)#找到标签的最大下标位置,作为类别
    Y_train_outclasslist = Y_train_outclass.tolist()
    Y_train_classlist = Y_train_class.tolist()#转成list格式
    C = confusion_matrix(Y_train_classlist, Y_train_outclasslist,
                         labels=[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23,
                                 24, 25, 26, 27, 28, 29])#计算混淆矩阵
    #混淆矩阵函数,第一个参数:真实值,第二个参数:标签,第三个参数:标签内容
    C = np.array(C) / (Y_train.shape[0] / nb_class)#转成百分比,正确率
    ax = sns.heatmap(C, cmap=plt.cm.Blues)#画热力图,cmap表示设定的颜色集
    plt.title('Confusion_Matrix')
    plt.xticks(rotation=50)
    plt.ylabel('True label')
    plt.xlabel('Predicted label')
    plt.savefig("heatmap3.png")#将热力图输出保存
    plt.show()

用于实验对比。

keras中间层输出

这个方法很有用,可以让我们灵活的对模型任意一层(关键是最后一层)的输出进行进一步操作。
https://blog.csdn.net/hahajinbu/article/details/77982721

核心就是在model规划完毕后,对model权重进行训练(或者加载权重),进行predict操作,输出即是np.array格式的数组结果。
对应着每个神经元的输出。如果是最后一层softmax,则输出 样本数*末层神经元 的二维数组,对应每个样本的神经元内存储的是0-1的概率值。

model.fit(data, labels, epochs=10, batch_size=32)
#已有的model在load权重过后
#取某一层的输出为输出新建为model,采用函数模型
dense1_layer_model = Model(inputs=model.input,
                                     outputs=model.get_layer('Dense_1').output)
#以这个model的预测值作为输出
dense1_output = dense1_layer_model.predict(data)

其他

np.array list 格式互换

遇到有用的一些代码段,保存下来。
a=([1,2,3,4])
a为python的list类型
将a转化为numpy的array:

b = np.array(a)

将a转化为python的list

c = a.tolist()

一定要加上前面的变量和等号!

matplotlib坐标轴操作

参照:https://blog.csdn.net/qq_40693171/article/details/85224423

  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值