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

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

**Stack:** Python, Cython (C++), numpy, matplotlib, Makefile e setup.py.

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://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.

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

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