51 lines
1.3 KiB
Python
51 lines
1.3 KiB
Python
|
import matplotlib
|
||
|
import matplotlib.pyplot as plt
|
||
|
import numpy as np
|
||
|
import umap
|
||
|
|
||
|
matplotlib.use("Agg")
|
||
|
|
||
|
|
||
|
colormap = (
|
||
|
np.array(
|
||
|
[
|
||
|
[76, 255, 0],
|
||
|
[0, 127, 70],
|
||
|
[255, 0, 0],
|
||
|
[255, 217, 38],
|
||
|
[0, 135, 255],
|
||
|
[165, 0, 165],
|
||
|
[255, 167, 255],
|
||
|
[0, 255, 255],
|
||
|
[255, 96, 38],
|
||
|
[142, 76, 0],
|
||
|
[33, 0, 127],
|
||
|
[0, 0, 0],
|
||
|
[183, 183, 183],
|
||
|
],
|
||
|
dtype=float,
|
||
|
)
|
||
|
/ 255
|
||
|
)
|
||
|
|
||
|
|
||
|
def plot_embeddings(embeddings, num_classes_in_batch):
|
||
|
num_utter_per_class = embeddings.shape[0] // num_classes_in_batch
|
||
|
|
||
|
# if necessary get just the first 10 classes
|
||
|
if num_classes_in_batch > 10:
|
||
|
num_classes_in_batch = 10
|
||
|
embeddings = embeddings[: num_classes_in_batch * num_utter_per_class]
|
||
|
|
||
|
model = umap.UMAP()
|
||
|
projection = model.fit_transform(embeddings)
|
||
|
ground_truth = np.repeat(np.arange(num_classes_in_batch), num_utter_per_class)
|
||
|
colors = [colormap[i] for i in ground_truth]
|
||
|
fig, ax = plt.subplots(figsize=(16, 10))
|
||
|
_ = ax.scatter(projection[:, 0], projection[:, 1], c=colors)
|
||
|
plt.gca().set_aspect("equal", "datalim")
|
||
|
plt.title("UMAP projection")
|
||
|
plt.tight_layout()
|
||
|
plt.savefig("umap")
|
||
|
return fig
|