t-SNE(t-distributed stochastic neighbor embedding)是一种用于降维和可视化高维数据的算法,通常用于聚类分析。t-SNE能够将高维数据点映射到一个低维空间中(通常是2D或3D),并且能够保留数据点之间的局部关系,同时尽量降低全局误差。因此,t-SNE可用于数据可视化,以便观察聚类结果
只要将你要可视化的网络层数据丢进plot_tsne()中
def plot_tsne(features, labels,k):
'''
features:(N*m) N*m大小特征,其中N代表有N个数据,每个数据m维
label:(N) 有N个标签
'''
import pandas as pd
import seaborn as sns
tsne = TSNE(n_components=2, init='pca', perplexity=3, n_iter=300, random_state=42, learning_rate='auto', n_jobs=7)
class_num = len(np.unique(labels)) # 要分类的种类个数 eg:[0, 1, 2, 3]这个就是为4
tsne_features = tsne.fit_transform(features)
print('tsne_features的shape:', tsne_features.shape)
df = pd.DataFrame()
df["y"] = labels
df["comp-1"] = tsne_features[:, 0]
df["comp-2"] = tsne_features[:, 1]
#df["comp-3"] = tsne_features[:, 2]如果要复现3维再添加并使n_components=3
sns.scatterplot(x="comp-1", y="comp-2", hue=df.y.tolist(),
palette=sns.color_palette("hls", class_num),
data=df).set(title="T-SNE projection")
plt.show()
#一定要在show后才储存,否则保存的是空白图
plt.savefig('./你的文件名%d.png'%(k), dpi=120)
#data,labels是你自己的数据和标签,
#output是某一层的输出,数据格式为[N, C, H, W],[C, H, W]或[C, W]
output = model(data)
for layer in output:
k = k+1
print(layer.shape)
data = layer.view(batch-size, -1)
data = data.detach().cpu().numpy()
fig = plot_tsne(data, labels,k)