Rete neurale da zero in Cython
Una piccola libreria di reti neurali scritta senza PyTorch né TensorFlow, in Cython con parti in C++, che si usa da Python con array numpy. L'ho fatta da solo per l'esame di Machine Learning all'Università di Pisa.
Volevo capire la backpropagation dall'interno, senza una libreria che la nasconda, e allo stesso tempo scendere sotto Python: tipi C, memoria allocata a mano, memoryview. Non è pensata per la produzione: è un esercizio d'esame, il motore del progetto per il corso.
Cosa contiene
- 01
Perceptron multistrato
Una classe con struttura a strati arbitraria, funzione di attivazione per strato, learning rate, momentum e regolarizzazione. Addestramento con backpropagation, set di validazione opzionale, train e predict.
- 02
Una variante incrementale
Una Cascade Correlation: parte da soli ingressi e uscite e aggiunge neuroni nascosti uno alla volta, scegliendo il candidato più correlato con l'errore residuo e congelandone i pesi. Rimasta incompleta nel 2022, l'ho completata nel 2026 con l'aiuto di Claude Code.
- 03
Prove
Uno script di prova con il problema XOR, con la curva dell'errore e la mappa della decisione, il dataset MONK-1 e quello del corso (i dati sono del docente, non miei).
Cosa ho fatto io
Tutto il codice, da solo: circa 940 righe tra Cython e script di prova. Ottimizzatore: discesa del gradiente con momentum, nient'altro. Solo strati completamente connessi.
Limiti
Il README è di due righe, non ci sono test automatici (solo uno script dimostrativo) e non ho confrontato la velocità con altre librerie, quindi non dichiaro vantaggi. Fermo da febbraio 2022.
Stack: Python, Cython (C++), numpy, matplotlib, Makefile e setup.py.
