malva-prune-brain / scripts /select_cortes.py
malvalabel's picture
Upload scripts/select_cortes.py with huggingface_hub
f262d53 verified
Raw
History Blame Contribute Delete
1.67 kB
import numpy as np
conv=np.load("/counts_conv.npy").astype(float)
sys7k=np.load("/counts_sys7k.npy").astype(float)
vis=np.load("/counts_vision.npy").astype(float)
L,E=conv.shape
print("=== ANALISIS EXPERTOS DE VISION ===")
va=(vis>0).sum(1)
print(f"expertos activados por tokens VISUALES: min={va.min()} max={va.max()} mean={va.mean():.0f} de {E}")
print(f"activaciones visuales totales: {vis.sum()/1e6:.1f}M")
puros=0
for l in range(L):
cr=np.argsort(np.argsort(conv[l]))
ve=np.where(vis[l]>0)[0]
p=[e for e in ve if cr[e]<E*0.35]
puros+=len(p)
print(f"expertos ESPECIALIZADOS en vision (activos imagen, raros texto): {puros/L:.0f} prom/capa")
overlap=[]
for l in range(L):
tv=set(np.argsort(-vis[l])[:100]); tc=set(np.argsort(-conv[l])[:100])
overlap.append(len(tv&tc)/100)
print(f"overlap top-100 vision vs texto: {np.mean(overlap)*100:.0f}%")
def norm(c): s=c.sum(1,keepdims=True); s[s==0]=1; return c/s
nc,ns,nv=norm(conv),norm(sys7k),norm(vis)
print("=== SELECCION 4 CORTES (garantizando vision) ===")
for N in [200,250,300,350]:
sel=np.zeros((L,N),dtype=np.int64); vt=0
for l in range(L):
score=0.6*nc[l]+0.2*ns[l]+0.2*nv[l]
order=np.argsort(-score); chosen=set()
ve=np.where(vis[l]>0)[0]
vs=ve[np.argsort(-vis[l][ve])]; cap=min(len(vs),int(N*0.35))
for e in vs[:cap]:
if len(chosen)<N: chosen.add(int(e))
vt+=len(chosen)
for e in order:
if len(chosen)>=N: break
chosen.add(int(e))
sel[l]=sorted(chosen)[:N]
np.save(f"/sel_{N}.npy",sel)
print(f" N={N}: {vt/L:.0f} expertos de vision garantizados/capa")
print("DONE")