異常音検知の研究で埋め込み空間の分布がどのように変化するのかを簡易的に見たいという状況になったので、お手軽に扱えるt-SNEを使用したので、そのコードを紹介します。
詳しい理論については、もっとよい記事がたくさん紹介されているのでそちらをご覧ください!
この記事ではニューラルネットのある層の出力が埋め込み空間内でどのように分布しているかを可視化することが目的です。
実装
では、いきます!
import numpy as np
import matplotlib.pyplot as plt
import torch
from sklearn.manifold import TSNE
model = ResNet38() # 自作モデル
checkpoint_path = "checkpoint-5000steps.pkl"
model.load_state_dict(torch.load(checkpoint_path, map_location="cpu"))
y_pred = model(X) # {"y_pred": (B, n_class), "embedding": (B, 2048)}
embedding = y_pred["embedding"].detach().numpy() # (B, 2048)
tsne = TSNE(n_components=2, random_state=0, perplexity=30, n_iter=1000)
X_embedded = tsne.fit_transform(embedding) # (B, 2)
colors = ["r", "g", "b"]
label_names = ["normal", "anomaly", "outliter"]
plt.figure()
for i , label_name in enumerate(label_names):
tmp = X_embedded[label == label_name]
plt.scatter(tmp[:, 0],
tmp[:, 1],
alpha=0.5,
label=label_name,
color=colors[i])
plt.legend()



簡単に可視化することができました!
そして、anomalyがnormalとoutliterの中間に分布しているという、とても示唆的な画像が出てきましたね。
かなりお手軽にできることが分かったので、学習時にこういったものをstepごとに可視化してあげることも学習が上手に進んでいるかを確認することに役立つのかを知る情報になりそうだと感じました。
スポンサーリンク
タイピングもままならない完全にプログラミング初心者から
アホいぶきんぐ
プログラミングってどこの国の言語なの~?
たった二ヶ月で
いぶきんぐ
え!?人工知能めっちゃ簡単にできるじゃん!
応用も簡単にできる…!!
という状態になるまで、一気に成長させてくれたオススメのプログラミングスクールをご紹介します!



テックアカデミーのPython+AIコースを受講した僕が本音のレビュー・割引あり! というプログラミング完全初心者だった僕が
Tech Academy(テックアカデミー)のPython×AIコース を二ヶ月間...