Corso
Chi lavora nel machine learning e gli ingegneri del software si affidano spesso ai framework per alleggerire parte del lavoro pesante legato alla programmazione.
Per esempio, i framework di machine learning permettono di implementare modelli senza dover approfondire i fondamenti matematici degli algoritmi.
Questo snellisce lo sviluppo per i programmatori, che non sono costretti a riscrivere continuamente codice per creare le loro applicazioni.
Questi concetti valgono anche per il deep learning — un sottoinsieme del machine learning. TensorFlow, Keras e PyTorch sono tre dei framework di deep learning più popolari.
In questo tutorial, esploreremo ciascuno di essi e svilupperemo una soluzione orientativa per aiutarti a decidere quale sia quello giusto da usare per il tuo progetto.
Che cos'è TensorFlow?
TensorFlow è un framework di deep learning end-to-end. È stato sviluppato dal team Google Brain, inizialmente per uso interno in Google per ricerca e produzione; è stato poi reso open source nel 2015 sotto licenza Apache. Nel settembre 2019, Google ha rilasciato una nuova versione aggiornata di TensorFlow con il nome TensorFlow 2.0. Puoi esplorare il framework più nel dettaglio nel nostro tutorial su TensorFlow.
Alcune delle caratteristiche principali di TensorFlow includono:
- TensorBoard. Un set di strumenti di visualizzazione per TensorFlow che aiuta a comprendere, effettuare il debug e ottimizzare i programmi TensorFlow.
- Feature columns. Astrazioni di alto livello che trasformano i dati grezzi in formati adatti ai modelli di machine learning, semplificando la gestione di diversi tipi di dati.
- Facile addestramento su CPU e GPU. TensorFlow può addestrare modelli su vari tipi di hardware, inclusi CPU e GPU, consentendo calcoli flessibili ed efficienti.
- Training parallelo. TensorFlow supporta il calcolo distribuito, permettendo l'elaborazione simultanea di dati e modelli su più CPU o GPU, accelerando notevolmente i tempi di addestramento.
Pro di TensorFlow
Open source
TensorFlow è un framework open source, quindi è gratuito e può essere usato da chiunque senza dover sottoscrivere in anticipo contratti con un fornitore.
Debugging
Una delle caratteristiche chiave di TensorFlow è TensorBoard. TensorBoard è ciò che fornisce la visualizzazione e gli strumenti necessari per la sperimentazione nel
TensorBoard offre la visualizzazione e gli strumenti necessari per la sperimentazione di machine learning nel deep learning, rendendo molto più semplice il debug del tuo codice TensorFlow.
Compatibilità con Keras
Quando Google ha annunciato il rilascio di TensorFlow 2.0, ha anche dichiarato Keras API ufficiale di alto livello di TensorFlow. Questo permette agli utenti di aggiungere funzionalità di alto livello al loro codice e beneficiare della semplicità di Keras.
Scalabilità
TensorFlow non è limitato a un singolo dispositivo. Gli utenti possono sviluppare sistemi con il framework e aspettarsi che funzionino con la stessa efficienza sui dispositivi edge come su qualsiasi altra macchina complessa.
Compatibilità
Il framework è compatibile con diversi linguaggi di programmazione; quindi gli utenti possono lavorare nel linguaggio con cui si sentono più a loro agio.
TensorFlow offre un'API affidabile per Python, insieme ad API per Javascript, C++ e Java che non garantiscono la retrocompatibilità. Inoltre, esistono pacchetti di terze parti che forniscono binding di linguaggio per C#, Haskell, Julia, MATLAB, Object Pascal, R, Scala, Rust, OCaml e Crystal.
Parallelismo
TensorFlow è visto come una libreria di accelerazione hardware. Il framework usa strategie di distribuzione differenti in sistemi GPU e CPU. Ciò significa che l'utente è libero di usare l'architettura che preferisce. Nota che il sistema predefinisce la GPU se non specificato esplicitamente; questo processo riduce in una certa misura l'uso della memoria.
Svantaggi di TensorFlow
Aggiornamenti frequenti
Il sovraccarico per un utente nel installare e integrare TensorFlow nel proprio sistema esistente aumenta a causa degli aggiornamenti frequenti
Omonimi incoerenti
TensorFlow offre omonimi, difficili da comprendere e usare poiché hanno nomi identici ma implementazioni diverse. Per esempio, tf.nn.conv2d e tf.layers.Conv2d hanno lo stesso nome, ma impostazioni leggermente diverse che possono alterare gli output.
Loop simbolici mancanti
TensorFlow è considerato un'API di basso livello — e a ragion veduta. Il framework non gestisce automaticamente iterazioni che producono loop simbolici. Tuttavia, ha impieghi per sequenze definite, rendendolo comunque un sistema utilizzabile.
Supporto GPU limitato
Il framework supporta solo NVIDIA e Python per la programmazione GPU. Non c'è supporto aggiuntivo.
Bassa velocità di implementazione
Su tutte le configurazioni hardware, TensorFlow richiede costantemente più tempo per addestrare vari tipi di reti neurali rispetto ai concorrenti.
Che cos'è Keras?
Keras è una popolare API open source di alto livello per reti neurali sviluppata da François Chollet e rilasciata nel 2015. La documentazione la definisce “un'API progettata per gli esseri umani, non per le macchine”.
A metà 2017, il framework è stato adottato e integrato in TensorFlow, rendendolo accessibile agli utenti TensorFlow tramite il modulo tf.keras. Tuttavia, è ancora possibile usare Keras in modo indipendente da TensorFlow – dai un'occhiata a questo cheat sheet di Keras o al nostro tutorial completo su Keras.
Ecco altro dalla documentazione:
“Keras si concentra sulla velocità di debugging, l'eleganza e la concisione del codice, la manutenibilità e la distribuibilità. Quando scegli Keras, la tua base di codice è più piccola, più leggibile, più facile da iterare. I tuoi modelli sono più veloci grazie alla compilazione XLA e alle ottimizzazioni Autograph e sono più facili da distribuire su ogni superficie (server, mobile, browser, embedded) grazie a TF Serving, TF Lite e TF.js.”
Pro di Keras
Semplicità
Keras ha un'API estremamente semplice e intuitiva, che ne facilita l'apprendimento e l'avvio con il deep learning.
Supporto per backend
Keras non utilizza calcoli di basso livello per funzionare — il framework è costruito sopra Microsoft CNTK, Theano e TensorFlow. Pertanto, incoraggia l'uso di backend.
Modelli pre-addestrati
Un modello pre-addestrato è un modello salvato dopo essere stato già addestrato su un ampio dataset. Keras fornisce diversi modelli pre-addestrati pronti all'uso.
Sperimentazione rapida
Keras è un'API di alto livello; questo significa che è piuttosto astratta e più generica. Di conseguenza, gli utenti possono costruire rapidamente modelli con poche righe di codice.
Supporto della community
Keras è una piattaforma open source e ha una grande community di ricercatori e sviluppatori attivi che contribuiscono a supportarsi a vicenda.
Documentazione chiara
La documentazione di Keras è ricca di esempi di codice, rendendo semplice per gli utenti comprendere rapidamente i concetti del framework.
Contro di Keras
Alcune funzionalità migliorabili
Diversi professionisti concordano sul fatto che Keras sia un po' carente sul fronte delle funzionalità, e che ci sia ampio margine di miglioramento. Un esempio è che il framework non supporta la creazione dinamica di grafici.
Errori poco efficienti
I messaggi di errore della libreria Keras non sono efficaci. È necessario che i problemi siano visibili con chiarezza. Individuare la causa principale dell'errore non risulta sempre utile. Keras richiede molto debugging.
API di alto livello
Keras è un'API di alto livello. Di conseguenza, hai molto meno controllo nella manipolazione delle funzioni.
Che cos'è PyTorch?
PyTorch è il più recente tra questi framework di deep learning. Sviluppato dal gruppo di ricerca AI di Facebook (ora Meta) e reso open source nel 2016, PyTorch fa ora parte dell'ombrello della Linux Foundation.
Nel corso degli anni, PyTorch si è costruito una reputazione di semplicità, flessibilità ed efficienza. Consente agli sviluppatori di costruire rapidamente reti neurali complesse per applicazioni come computer vision e elaborazione del linguaggio naturale.
Alcune delle sue caratteristiche principali includono:
- Computazione con tensori. PyTorch fornisce un array multidimensionale chiamato Tensor, simile all'ndarray di NumPy, ma in grado di girare su GPU per calcoli più rapidi.
- TorchScript. Un modo per serializzare i modelli PyTorch, consentendo di eseguirli in altri ambienti come C++, garantendo la prontezza per la produzione.
- Grafi computazionali dinamici. PyTorch usa grafi computazionali dinamici, offrendo flessibilità nella costruzione e modifica dei modelli al volo, utile per architetture complesse.
- Differenziazione automatica. La differenziazione automatica e il calcolo dei gradienti semplificano la backpropagation e l'addestramento delle reti neurali.
- Supporto Python. PyTorch si integra perfettamente con l'ecosistema Python, facilitandone l'uso con le librerie Python e offrendo un'interfaccia più pitonica e user-friendly.
Pro di PyTorch
Pythonico
PyTorch è per sua natura pitonico, il che lo rende piuttosto immediato da adottare per gli sviluppatori Python. Questo è un vantaggio poiché gran parte del lavoro di deep learning si svolge in Python.
Facile da imparare
La sintassi di PyTorch è estremamente semplice e intuitiva. I professionisti riconoscono a PyTorch una curva di apprendimento ridotta — alcuni dicono che sia uno dei pacchetti di deep learning più facili da imparare.
Facile da fare debug
PyTorch può utilizzare gli strumenti di debugging pdb e ipdb di Python. I programmatori possono anche usare PyCharm, l'IDE Python, per il debug poiché PyTorch crea un grafo computazionale in tempo reale.
Community forte
Pur essendo uno dei framework di deep learning più recenti, PyTorch è riuscito a sviluppare rapidamente una community dedicata di sviluppatori. Queste persone lavorano sodo per assicurare che la documentazione sia ben strutturata e utile per altri sviluppatori.
Parallelismo dei dati
Il parallelismo dei dati in PyTorch è estremamente efficace, poiché consente di suddividere i dati in batch e inviarli a varie GPU per l'elaborazione. Adottando questo metodo, PyTorch trasferisce una parte consistente del carico dalla CPU alla GPU.
Contro di PyTorch
Nessuna visualizzazione dei dati
TensorBoard di TensorFlow consente di visualizzare il processo di training, ma non esiste nulla di simile in PyTorch — gli utenti devono usare uno strumento di terze parti.
Server API necessario in produzione
Non esiste un framework per esporre i modelli direttamente sul web; quindi è necessario usare un server backend di terze parti come Flask o Django.
Quale scegliere? Analisi comparativa tra PyTorch, Keras e TensorFlow
|
TensorFlow |
PyTorch |
Keras |
|
|
Livello API |
Entrambi (alto e basso) |
Basso |
Alto |
|
Architettura |
Non facile da usare |
Complessa, meno leggibile |
Semplice, concisa, leggibile |
|
Dataset |
Dataset grandi, alte prestazioni |
Dataset grandi, alte prestazioni |
Dataset più piccoli |
|
Debugging |
Difficile eseguire il debugging |
Buone capacità di debugging |
Rete semplice, quindi il debugging spesso non serve |
|
Modelli pre-addestrati? |
Sì |
Sì |
Sì |
|
Popolarità |
Secondo più popolare dei tre |
Terzo più popolare dei tre |
Il più popolare dei tre |
|
Velocità |
Veloce, alte prestazioni |
Veloce, alte prestazioni |
Lento, basse prestazioni |
|
Scritto in |
C++, CUDA, Python |
Lua |
Python |
Scegliere il framework giusto
La risposta a “qual è il framework migliore?” sarà sempre soggettiva, dato che ogni framework ha pro e contro, come abbiamo visto. Tuttavia, ecco un elenco di aspetti da considerare quando decidi quale framework adottare.
Pytorch vs TensorFlow
- Codice boilerplate. Sia PyTorch sia TensorFlow semplificano la costruzione dei modelli eliminando gran parte del codice boilerplate.
- Pythonico e OOP. PyTorch è più "pythonico" e aderisce ai principi della programmazione a oggetti, rendendolo intuitivo per gli sviluppatori Python.
- Popolarità. TensorFlow, essendo più anziano e supportato da Google, ha una base utenti e un supporto della community più ampi.
- Flessibilità. PyTorch offre maggiore flessibilità grazie all'uso di grafi di calcolo dinamici, consentendo modifiche al volo.
- Debugging e tracciamento. TensorBoard di TensorFlow fornisce potenti strumenti di visualizzazione per il debugging e il monitoraggio del training.
- Framework di serving. TensorFlow ha un sistema di serving più maturo per distribuire i modelli, rendendo il deployment più lineare rispetto a PyTorch.
PyTorch vs Keras
- Curva di apprendimento. Sia PyTorch sia Keras sono user-friendly, quindi facili da imparare e usare.
- Ricerca vs sviluppo. PyTorch è spesso preferito dai ricercatori per la sua flessibilità e controllo, mentre Keras è apprezzato dagli sviluppatori per semplicità e natura plug-and-play.
- Velocità e debugging. In generale PyTorch è più veloce e offre capacità di debugging superiori rispetto a Keras.
- Tutorial e dataset piccoli. Keras brilla per i suoi tutorial con codice riutilizzabile ed è particolarmente efficace quando si lavora con dataset di piccole dimensioni.
TensorFlow vs Keras
- API di alto livello. Sia TensorFlow sia Keras offrono API di alto livello per costruire e addestrare modelli.
- Natura pythonica. Keras, essendo costruito in Python, è più user-friendly e intuitivo.
- Dataset grandi. TensorFlow è spesso preferito nella gestione di dataset di grandi dimensioni grazie a robustezza e scalabilità.
- Wrapper. Keras agisce da wrapper alle funzioni di TensorFlow, semplificando l'interfaccia di TensorFlow per facilitarne l'uso.
Conclusione
TensorFlow, PyTorch e Keras sono tre dei framework di deep learning più popolari. Ognuno ha qualità specifiche che lo rendono un ottimo strumento in determinati ambiti. Quello che sceglierai di imparare e usare dipende nello specifico dal tuo caso d'uso e da altri fattori, come le tue competenze tecniche e il tempo a disposizione per imparare.
Indipendentemente dal framework che sceglierai, su DataCamp ci sono diversi corsi utili per iniziare:


