---
title: "Rete neurale da zero in Cython"
url: "https://edoardo.anteprime.edoardogabrielli.com/it/progetti/rete-neurale-cython"
lang: "it"
updated: "2026-11-01"
---

# Rete neurale da zero in Cython

> Una libreria di reti neurali scritta da zero in Cython, senza PyTorch né TensorFlow: progetto d'esame di Machine Learning a Pisa.

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

### 1. 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.

### 2. 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.

### 3. 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).

![Animazione: la rete cresce di un neurone nascosto alla volta, la previsione si raffina fino a separare le due spirali e l'errore scende](https://edoardo.anteprime.edoardogabrielli.com/media/originals/2026/11/f7b0a3b2dec642ca880b28a45e857358/nn-cython-cascade.webp)

Cascade Correlation sulle due spirali (200 punti): 8 neuroni nascosti aggiunti uno alla volta, errore finale 0,003, 100% dei punti classificati. Codice Cython completato nel 2026.

### 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.

[Codice su GitHub](https://github.com/dodogabrie/NN_from_scratch)

[← Tutti i progetti](https://edoardo.anteprime.edoardogabrielli.com/it/progetti)