今日在進行attention可視化時查詢了一些資料,文本attention矩陣可視化代碼記錄如下:
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
import matplotlib.ticker as ticker
import matplotlib as mpl
variables = ['A','B','C','X']
labels = ['ID_0','ID_1','ID_2','ID_3']
mpl.rcParams['font.sans-serif'] = ['WenQuanYi Micro Hei'] # 設(shè)置中文字體為黑體
mpl.rcParams['axes.unicode_minus'] = False
df = pd.DataFrame(d, columns=variables, index=labels) #其中d為4*4的矩陣
fig = plt.figure(figsize=(15,15)) #設(shè)置圖片大小
ax = fig.add_subplot(111)
cax = ax.matshow(df, interpolation='nearest', cmap='hot_r')
fig.colorbar(cax)
tick_spacing = 1
ax.xaxis.set_major_locator(ticker.MultipleLocator(tick_spacing))
ax.yaxis.set_major_locator(ticker.MultipleLocator(tick_spacing))
ax.set_xticklabels([''] + list(df.columns))
ax.set_yticklabels([''] + list(df.index))
plt.show()
最終結(jié)果顯示:

attention.png
可能出現(xiàn)的問題:
■ 輸出中文為方框。
使用下列代碼查看可用字體,如果有中文就直接使用mpl.rcParams['font.sans-serif'] = [fontname] 將字體設(shè)置為對應(yīng)的字體
from matplotlib.font_manager import FontManager
import subprocess
fm = FontManager()
mat_fonts = set(f.name for f in fm.ttflist)
#print(mat_fonts)
output = subprocess.check_output(
'fc-list :lang=zh -f "%{family}\n"', shell=True) # 獲取字體列表
output = output.decode('utf-8')
#print(output)
zh_fonts = set(f.split(',', 1)[0] for f in output.split('\n'))
available = mat_fonts & zh_fonts
print('*' * 10, '可用的字體', '*' * 10)
for f in available:
print(f)
若字體庫中不存在可用字體,也可自己下載字體添加到matplotlib中。詳細添加方法可自行查閱。
參考:
https://blog.csdn.net/m0_38133212/article/details/86664569