attn_output_weights 在 MultiheadAttention
attn_output_weights in MultiheadAttention
我想知道 attn_output_weight
的矩阵是否可以证明输入序列中每个词对之间的关系。
在我的项目中,我根据这个输出绘制了热图,它显示如下:
但是,我几乎看不到这张热图的任何信息。
我参考了别人的作品,他们的热图是这样的。至少矩阵的对角线应该有深色。
然后我想知道我画热图的方法是否正确(即直接使用 attn_output_weight
的输出)如果这不是正确的方法,请告诉我如何绘制热图?
看来你的取值范围比较有限。在目标示例中,值的范围位于 [0, 1]
之间,因为每一行代表 softmax 分布。从attention的定义可见:
我建议您规范化每一行/列(根据您使用的注意力实现),最后可视化 [0, 1]
范围内的注意力图。您可以在 matplotlib 绘图中分别使用参数 vmin
和 vmax
来执行此操作。
如果这不能解决问题,也许可以添加一段代码,其中包含您正在使用的模型和可视化脚本。
我想知道 attn_output_weight
的矩阵是否可以证明输入序列中每个词对之间的关系。
在我的项目中,我根据这个输出绘制了热图,它显示如下:
但是,我几乎看不到这张热图的任何信息。
我参考了别人的作品,他们的热图是这样的。至少矩阵的对角线应该有深色。
然后我想知道我画热图的方法是否正确(即直接使用 attn_output_weight
的输出)如果这不是正确的方法,请告诉我如何绘制热图?
看来你的取值范围比较有限。在目标示例中,值的范围位于 [0, 1]
之间,因为每一行代表 softmax 分布。从attention的定义可见:
我建议您规范化每一行/列(根据您使用的注意力实现),最后可视化 [0, 1]
范围内的注意力图。您可以在 matplotlib 绘图中分别使用参数 vmin
和 vmax
来执行此操作。
如果这不能解决问题,也许可以添加一段代码,其中包含您正在使用的模型和可视化脚本。