pytorch 绘制一维热力图

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

热力图

热力图Heat Map是指用 X 轴 和 Y 轴 表示的两个分类字段确定数值点的位置通过相应位置的矩形颜色去表现数值的大小颜色深代表的数值大。

热力图是非常特殊的一种图可以显示不可点击区域发生的事情。热力图非常关注分布可以不需要坐标轴其背景通常是图片或者地图一般使用彩虹色系做展示。

热力图一般以二维居多多用于图像处理领域。

热力图主要用于展示连续型数据的分布情况。例如用颜色展现某一范围内不同地区数据量的差异网站分析等等。

优势好看、易于理解数据信息更直观有效可以清晰地呈现数据在地理空间的分布、频率或密度情况。

缺点效果过于柔化不适合用作数据的精确表达且不适合比较单一变量的大小。

一维热力图-----总体分布情况

根据折线图中的数据创建一维热图类似于直方图根据每个 bins 的出现频率绘制不同颜色

代码

可以通过imshow关键字参数设置imshow设置图像的数据范围。 这用元组(left, right, bottom, top)设置范围。
在范围内使用直方图的最小和最大bin边缘可将数据移动到其原始值

import matplotlib.pyplot as plt
import numpy as np; np.random.seed(1)
# 画布大小
plt.rcParams["figure.figsize"] = 5,2
# 顺序生成 -56 到 40 之间的96个数
pos = np.arange(-56,40) #there are 96 numbers from -56 to 39
print len(pos), pos.min(), pos.max()
# 生成 96 个随机数
p = np.random.rand(len(pos))
# 随机数转化成概率
p= p/np.sum(p)
# 根据每个数出现的概率在 pos 中挑选 4000 个数
a= np.random.choice(pos, size=4000, p=p)
# 将 a 的取值范围划分为 96 个 bin
bins=np.arange(-56,41) 
# 得到直方分布hist 表示每个 bin 中数的个数 edges 表示 bin 的边界
hist, edges = np.histogram(a, bins)
hist=hist[np.newaxis,:]
# 热力图 x轴 和 y轴范围
extent=[bins.min(), bins.max(),0,1]
#画图
plt.imshow(hist, aspect ="auto", cmap="viridis", extent=extent)
plt.gca().set_yticks([])
plt.show()

一维热力图----数据变化情况

根据数据本身的波动情况根据数值本身大小变换颜色

例图可以看到数值大时热力图更红数值小时热力图更蓝
在这里插入图片描述

代码

import matplotlib.pyplot as plt
import numpy as np; np.random.seed(1)
# 画布大小
plt.rcParams["figure.figsize"] = 5,4
# 生成 40 个 sin 函数值
x = np.sin(range(40))
# 每x个数计算平均值即一段内的分布此处取为1即为每个数绘制分布
a = x.reshape(1,-1)
a = np.mean(a, axis=0)
a=a[np.newaxis,:]
# 绘制热力图
figure = plt.figure()
axes = figure.add_subplot(211)
axes.matshow(a,aspect ="auto",cmap="Spectral_r", interpolation='bilinear')
# 不显示横纵坐标
plt.xticks([])
plt.yticks([])
# 绘制原始数据图
plt.subplot(212)
plt.plot(range(len(x)),x)
# x轴显示范围从第一个数到最后一个
plt.xlim((0,len(x)-1))
plt.show()

attention 热力图绘制原理

难点在于数据获取获取最后一层梯度数据即可知道注意力重点根据梯度数据 resize 到原始数据再画出热力图根据数据变化情况之后与原始数据对应即可得到网络的高响应热力图

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6