E· Universitetdatorseende· ca 60 min· utvecklande· verifierad 2026-09-20
Visualisera vad ett CNN ser
Kunna visualisera filter och aktiveringar och tolka dem försiktigt.
Förkunskaper
- EFaltningsnät (CNN)krävs
Intuition
Vad har nätet lärt sig? Tre fönster in:
- Första lagrets filter kan ritas som små bilder: de blir kantdetektorer, färgövergångar, små texturer — förvånansvärt lika det biologiska synsystemet.
- Aktiveringskartor: mata in en bild, titta på utdata från ett lager. Ljusa fläckar = «det här filtret reagerade här».
- Saliency / Grad-CAM: gradienten av klass-poängen mot indata (eller sista faltningslagret) visar vilka pixlar som påverkade beslutet. Om «husky» avgörs av snön i bakgrunden ser du det här — och har hittat en genväg i datan.
Förbehåll: vackra bilder bevisar ingenting. En visualisering är en hypotes om vad nätet gör — testa den med interventioner (maska bort området, se om beslutet ändras).
Kod
import torch, matplotlib.pyplot as plt
# 1) första lagrets filter
w = m.f[0].weight.detach() # (32, 3, 3, 3)
fig, ax = plt.subplots(4, 8, figsize=(8, 4))
for i, a in enumerate(ax.flat):
f = w[i]; f = (f - f.min()) / (f.max() - f.min())
a.imshow(f.permute(1, 2, 0)); a.axis("off")
plt.savefig("filter.png")
# 2) aktiveringar via hook
akt = {}
m.f[3].register_forward_hook(lambda mod, i, o: akt.__setitem__("conv2", o.detach()))
m(x[None]); print(akt["conv2"].shape) # (1, 64, 16, 16)
# 3) saliency: |dScore/dPixel|
x.requires_grad_(True)
m(x[None])[0, klass].backward()
sal = x.grad.abs().max(0).values # (H, W)
plt.imsave("saliency.png", sal.numpy(), cmap="hot")
# intervention: maska det mest salienta området och se om sannolikheten faller
Behärskning innebär
- Visualiserar första lagrets filter och mellanlagers aktiveringar
- Tolkar visualiseringar med förbehåll
- Använder saliency/Grad-CAM för att se vad som påverkade ett beslut
Logga in för att göra övningarna och bygga upp din behärskning.
Källor
- arXiv — Grad-CAM — arXiv (öppen åtkomst; licens per artikel)
- Distill — Feature Visualization (CC BY 4.0) — CC BY 4.0