参考绘制tsne图,首先将模型中的注意力权重导出,因为我的模型中L=2,所以导出两层
# plot_weight
weight_model_layer0 = Model(inputs=model.inputs, outputs=model.get_layer('transformer_0').output)
weight_output_layer0 = weight_model_layer0.predict(X_test)
np.save('weight_output_layer0', weight_output_layer0[1])weight_model_layer1 = Model(inputs=model.inputs, outputs=model.get_layer('transformer_1').output)
weight_output_layer1 = weight_model_layer1.predict(X_test)
np.save('weight_output_layer1', weight_output_layer1[1])
然后,搜到一些使用seaborn绘制热力图的代码,其中我查的比较多的问题是
1、如何修改colorbar字体的大小
2、如何修改xy轴labelsize
3、如何给子图添加标题
就是cbar=False,再重新绘制一个colorbar
参考python使用seaborn画热力图中设置colorbar图例刻度字体大小_seaborn 设置colorbar刻度-CSDN博客
# 绘制热力图
hm1 = sns.heatmap(attention_per_head_0[0:40, 0:40], cbar=False, cbar_kws={'shrink': 0.8}, square=True, xticklabels='auto', yticklabels='auto')
# 修改xy轴labelsize
hm1.tick_params(labelsize=8)
# 设置标题
hm1.set_title('layer1_head_{}'.format(4), size=12)
# 显示colorbar
cb = hm1.figure.colorbar(hm1.collections[0])
# 修改colorbar的labelsize
cb.ax.tick_params(labelsize=8)