Librerie di Machine Learning per qualsiasi progetto

Librerie di Machine Learning per progetti

Esistono molte librerie disponibili che possono essere utilizzate nei progetti di apprendimento automatico. Naturalmente, alcune di queste si sono guadagnate una notevole reputazione nel corso degli anni. Tali librerie sono le scelte immediate per chiunque inizi un nuovo progetto che utilizza algoritmi di apprendimento automatico. Tuttavia, scegliere il set (o stack) corretto può essere piuttosto sfidante.

Il motivo

In questo post, vorrei darti una panoramica generale del panorama delle librerie di apprendimento automatico e condividere alcune delle mie riflessioni sul loro utilizzo. Se stai iniziando il tuo viaggio con una libreria di apprendimento automatico, il mio testo può fornirti una conoscenza generale delle librerie di apprendimento automatico e offrirti un punto di partenza migliore per approfondire la materia.

Le librerie descritte qui saranno suddivise in base al ruolo che possono svolgere nel tuo progetto.

Le categorie sono le seguenti:

  1. Creazione del modello – Librerie che possono essere utilizzate per creare modelli di apprendimento automatico
  2. Lavorare con i dati – Librerie che possono essere utilizzate sia per l’ingegneria delle caratteristiche, l’estrazione delle caratteristiche future e tutte le altre operazioni che coinvolgono il lavoro con le caratteristiche
  3. ottimizzazione degli iperparametri – Librerie e strumenti che possono essere utilizzati per l’ottimizzazione degli iperparametri del modello
  4. Tracciamento degli esperimenti – Librerie e strumenti utilizzati per il tracciamento degli esperimenti
  5. Librerie specifiche per problemi – Librerie che possono essere utilizzate per compiti come la previsione delle serie temporali, la visione artificiale e il lavoro con dati spaziali
  6. Utils – Librerie non strettamente legate all’apprendimento automatico, ma comunque utili nei miei progetti

Creazione del modello

PyTorch

Sviluppato da persone di Facebook e reso open-source nel 2017, è una delle librerie di apprendimento automatico più famose del mercato, basata sul pacchetto open-source Torch. L’ecosistema di PyTorch può essere utilizzato per tutti i tipi di problemi di apprendimento automatico e ha una grande varietà di librerie specializzate come torchvision o torchaudio.

La struttura dati di base di PyTorch è l’oggetto Tensor, che viene utilizzato per contenere dati multidimensionali utilizzati dal nostro modello. È simile per concetto all’array NumPy. PyTorch può anche utilizzare acceleratori di calcolo e supporta GPU NVIDIA abilitate per CUDA, ROCm, Metal API e TPU.

La parte più importante della libreria core di PyTorch è nn modules che contiene layer e strumenti per costruire facilmente modelli complessi strato per strato.

class NeuralNetwork(nn.Module):
    def __init__(self):
        super().__init__()
        self.flatten = nn.Flatten()
        self.linear_relu_stack = nn.Sequential(
            nn.Linear(28*28, 512),
            nn.ReLU(),
            nn.Linear(512, 512),
            nn.ReLU(),
            nn.Linear(512, 10),
        )

    def forward(self, x):
        x = self.flatten(x)
        logits = self.linear_relu_stack(x)
        return logits

Un esempio di una semplice rete neurale con 3 strati lineari in PyTorch

Inoltre, PyTorch 2.0 è già stato rilasciato, rendendo PyTorch ancora migliore. Inoltre, PyTorch è utilizzato da diverse aziende come Uber, Tesla e Facebook, solo per citarne alcune.

PyTorch Lightning

È una sorta di “estensione” per PyTorch, che mira a ridurre notevolmente la quantità di codice di base necessario per utilizzare i nostri modelli.

Lightning si basa sul concetto di hooks: funzioni chiamate in fasi specifiche del ciclo di allenamento/valutazione del modello. Questo approccio ci consente di passare funzioni di callback eseguite in un momento specifico, come la fine del passaggio di allenamento.

Lightning automatizza molte funzioni di cui uno deve occuparsi in PyTorch; ad esempio, il loop, la chiamata all’hardware o l’azzeramento dei gradienti.

Di seguito sono riportati frammenti di codice approssimativamente equivalenti di PyTorch (Sinistra) e PyTorch Lightning (Destra).

Fonte immagine

TensorFlow

Una libreria sviluppata da un team di Google Brain, originariamente rilasciata nel 2015 con licenza Apache 2.0, e la versione 2.0 è stata rilasciata nel 2019. Fornisce client in Java, C++, Python e persino JavaScript.

Similmente a PyTorch, è ampiamente adottato nel mercato ed è utilizzato da aziende come Google (sorpresa), Airbnb e Intel. TensorFlow ha anche un ecosistema piuttosto esteso costruito attorno ad esso da Google. Contiene strumenti e librerie come un toolkit di ottimizzazione, TensorBoard (ne parleremo di più nella sezione “Tracciamento degli esperimenti” qui sotto) o recommender. L’ecosistema di TensorFlow include anche una sandbox basata sul web per giocare con la visualizzazione del tuo modello.

Di nuovo il modulo tf.nn svolge il ruolo più vitale fornendo tutti i blocchi di costruzione necessari per costruire modelli di apprendimento automatico. Tensorflow utilizza il suo oggetto Tensor (flow ;p) per contenere i dati utilizzati dai modelli di apprendimento profondo. Supporta anche tutti gli acceleratori di calcolo comuni come CUDA o RoCm (community), Metal API e TPU.

class NeuralNetwork(models.Model):
    def __init__(self):
        super().__init__()
        self.flatten = layers.Flatten()
        self.linear_relu_stack = models.Sequential([
            layers.Dense(512, activation='relu'),
            layers.Dense(512, activation='relu'),
            layers.Dense(10)
        ])
    def call(self, x):
        x = self.flatten(x)
        logits = self.linear_relu_stack(x)
        return logits

Si noti che in TensorFlow e Keras utilizziamo il livello Dense invece del livello Lineare utilizzato in PyTorch. Utilizziamo anche il metodo call invece del metodo forward per definire il passaggio in avanti del modello.

Keras

È una libreria simile in significato e inizio a PyTorch Lightning ma per TensorFlow. Offre un’interfaccia più di alto livello rispetto a TensorFlow. Sviluppato da François Chollet e rilasciato nel 2015, fornisce solo client Python. Keras ha anche il suo set di librerie Python e librerie specifiche del problema come KerasCV o KerasNLP per casi d’uso più specializzati.

Prima della versione 2.4 Keras supportava più backend oltre a TensorFlow, ma dopo il rilascio, TensorFlow è diventato l’unico backend supportato. Poiché Keras è solo un’interfaccia per TensorFlow, condivide concetti di base simili al suo backend sottostante. Lo stesso vale per gli acceleratori di calcolo supportati. Keras è utilizzato da aziende come IBM, PayPal e Netflix.

class NeuralNetwork(models.Model):
    def __init__(self):
        super().__init__()
        self.flatten = layers.Flatten()
        self.linear_relu_stack = models.Sequential([
            layers.Dense(512, activation='relu'),
            layers.Dense(512, activation='relu'),
            layers.Dense(10)
        ])
    def call(self, x):
        x = self.flatten(x)
        logits = self.linear_relu_stack(x)
        return logits

Si noti che in TensorFlow e Keras utilizziamo il livello Dense invece del livello Lineare utilizzato in PyTorch. Utilizziamo anche il metodo call invece del metodo forward per definire il passaggio in avanti del modello.

PyTorch vs TensorFlow

Non sarei completamente onesto se non introducessi un confronto tra questi due.

Come hai potuto leggere poco fa, entrambi sono abbastanza simili per le funzionalità offerte e l’ecosistema che li circonda. Naturalmente, ci sono alcune differenze minori e particolarità su come entrambi lavorano o sulle funzionalità che forniscono. A mio parere, queste sono più o meno insignificanti.

La vera differenza tra loro deriva dal loro approccio alla definizione ed esecuzione dei grafi computazionali delle macchine e dei modelli di apprendimento automatico e profondo.

  • PyTorch utilizza grafi computazionali dinamici, il che significa che il grafo viene definito al volo durante l’esecuzione. Ciò consente maggiore flessibilità e debug intuitivo, poiché gli sviluppatori possono modificare il grafo durante l’esecuzione e ispezionare facilmente le uscite intermedie. D’altra parte, questo approccio potrebbe essere meno efficiente rispetto ai grafi statici, specialmente per modelli complessi. Tuttavia, PyTorch 2.0 cerca di affrontare questi problemi tramite torch.compile e i grafi FX.
  • TensorFlow utilizza grafi computazionali statici, che vengono compilati prima dell’esecuzione. Ciò consente un’esecuzione più efficiente, poiché il grafo può essere ottimizzato e parallelizzato per l’hardware di destinazione. Tuttavia, può anche rendere il debug più difficile, poiché le uscite intermedie non sono immediatamente accessibili.

Un’altra differenza significativa è che PyTorch sembra essere più di basso livello rispetto a Keras, pur essendo più di alto livello rispetto a TensorFlow puro. Tale impostazione rende PyTorch più elastico e più facile da usare per la creazione di modelli personalizzati con molte personalizzazioni.

Come nota aggiuntiva, vorrei aggiungere che entrambe le librerie sono allo stesso livello in termini di quota di mercato. Inoltre, nonostante TensorFlow utilizzi il metodo call e PyTorch utilizzi il metodo forward, entrambe le librerie supportano la semantica call come abbreviazione per chiamare modello(x).

Lavorare con i dati

pandas

Una libreria che hai sicuramente sentito nominare se stai usando Python, è probabilmente la libreria Python più famosa per lavorare con dati di qualsiasi tipo. È stata originariamente rilasciata nel 2008 e la versione 1.0 nel 2012. Fornisce funzioni per filtrare, aggregare e trasformare dati, nonché per unire più dataset.

La pietra angolare di questa libreria è un oggetto DataFrame che rappresenta una tabella multidimensionale di qualsiasi tipo di dati. La libreria si concentra molto sulle prestazioni, alcune parti sono scritte in puro C per aumentare le prestazioni.

Oltre ad essere focalizzata sulle prestazioni, pandas fornisce molte funzionalità relative a:

  • Pulizia e pre-elaborazione dei dati
    • Rimozione dei duplicati
    • Riempimento dei valori nulli o dei valori nan.
  • Analisi delle serie temporali
    • Ricampionaggio
    • Finestramento
    • Spostamento temporale

Inoltre, può eseguire una varietà di operazioni di input/output:

  • Lettura/scrittura da/per file .csv o .xlsx
  • Esecuzione di query del database
  • Caricamento dei dati da GCP BigQuery (con l’aiuto di pandas-gbq)

NumPy

È un’altra famosa libreria per lavorare con i dati, principalmente dati scientifici numerici. La parte più famosa di NumPy è un ndarray, una struttura che rappresenta un array multidimensionale di numeri.

Oltre all’ndarray, NumPy fornisce molte funzioni matematiche di alto livello e operazioni matematiche utilizzate per lavorare con questi dati. È probabilmente anche la libreria più antica di questo insieme, la prima versione è stata rilasciata nel 2005. È stata implementata da Travis Oliphant, basandosi su una libreria ancora più vecchia chiamata numeric (rilasciata nel 1996).

NumPy è estremamente concentrata sulle prestazioni, con i contributori che cercano di ottimizzare ancora di più il tempo di esecuzione delle funzioni di NumPy.

Ovviamente, come tutte le librerie descritte qui, numpy è anche open source e utilizza una licenza BSD.

SciPy

È una libreria focalizzata sul supporto ai calcoli scientifici. È ancora più vecchia di NumPy (2005), rilasciata nel 2001. È costruita su NumPy, con ndarray come struttura dati di base utilizzata in tutto SciPy. Tra le altre cose, la libreria aggiunge funzioni per l’ottimizzazione, l’algebra lineare, l’elaborazione del segnale, l’interpolazione e il supporto alle matrici sparse. In generale, è più ad alto livello di NumPy e può quindi fornire funzioni più complesse.

Ottimizzazione degli iperparametri

Ray Tune

È parte del set di strumenti Ray, un insieme di librerie correlate per la creazione di applicazioni distribuite focalizzate sull’apprendimento automatico e Python. La parte Tune della libreria ML è focalizzata sulla fornitura di funzionalità di ottimizzazione degli iperparametri, fornendo una varietà di algoritmi di ricerca; ad esempio, ricerca a griglia, hyperband o ottimizzazione bayesiana.

Ray Tune può lavorare con modelli creati nella maggior parte dei linguaggi di programmazione e delle librerie disponibili sul mercato. Tutte le librerie descritte nel paragrafo sulla creazione del modello sono supportate da Ray Tune.

I concetti chiave di Ray Tune sono:

  • Trainables – Oggetti passati alle esecuzioni di Tune; sono il nostro modello per il quale vogliamo ottimizzare i parametri
  • Spazio di ricerca – Contiene tutti i valori degli iperparametri che vogliamo controllare nella prova corrente
  • Tuner – Un oggetto responsabile dell’esecuzione delle prove, chiamando tuner.fit() si avvia il processo di ricerca dell’insieme ottimale di iperparametri. Richiede almeno un oggetto trainable e uno spazio di ricerca
  • Prova – Ogni prova rappresenta un’istanza particolare di un oggetto trainable con un insieme preciso di parametri presi dallo spazio di ricerca. Le prove vengono generate da Ray Tune Tuner. Poiché rappresenta l’output dell’esecuzione del tuner, la prova contiene una tonnellata di informazioni, come ad esempio:
    • Configurazione utilizzata per una particolare prova
    • ID della prova
    • Molte altre 
  • Algoritmi di ricerca – L’algoritmo utilizzato per una particolare esecuzione di Tuner.fit; se non viene fornito, Ray Tune utilizzerà RadomSearch come valore predefinito
  • Scheduler – Questi sono oggetti responsabili della gestione delle esecuzioni. Possono mettere in pausa, interrompere ed eseguire prove all’interno dell’esecuzione. Ciò può aumentare l’efficienza e ridurre il tempo di esecuzione. Se nessuno viene selezionato, Tune sceglierà FIFO come valore predefinito – le prove verranno eseguite una per volta come in una coda classica.
  • Analisi delle esecuzioni – L’oggetto che calcola i risultati dell’esecuzione di Tuner.fit sotto forma di un oggetto ResultGrid. Contiene tutti i dati relativi all’esecuzione, come il miglior risultato tra tutte le prove o i dati da tutte le prove.

BoTorch

BoTorch è una libreria costruita sopra PyTorch ed è parte dell’ecosistema di PyTorch. Si concentra esclusivamente sulla fornitura di ottimizzazione degli iperparametri con l’uso dell’ottimizzazione bayesiana.

Essendo l’unica libreria in questa parte progettata per funzionare con una libreria di modelli specifica, potrebbe essere problematico utilizzare BoTorch con librerie diverse da PyTorch. Inoltre, essendo l’unica libreria, attualmente è in versione beta e in fase di sviluppo intensivo, quindi potrebbero verificarsi alcuni problemi imprevisti.

La caratteristica chiave di BoTorch è la sua integrazione con PyTorch, che ha un grande impatto sulla facilità di interazione tra i due.

Tracciamento degli Esperimenti

Neptune.ai

È uno strumento basato sul web che serve sia come tracciamento degli esperimenti che come registro dei modelli. Lo strumento è basato su cloud nel classico modello SaaS, ma se sei determinato abbastanza, c’è la possibilità di utilizzare una variante auto-ospitata.

Fornisce una dashboard in cui è possibile visualizzare e confrontare i risultati dell’addestramento del modello. Può anche essere utilizzato per memorizzare i parametri utilizzati per esecuzioni particolari. Inoltre, è possibile versionare facilmente il dataset utilizzato per esecuzioni particolari e tutti i metadati che si ritengono utili.

Inoltre, consente un facile controllo delle versioni per i modelli. Ovviamente, lo strumento è agnostico alla libreria e può ospitare modelli creati con qualsiasi libreria. Per rendere possibile l’integrazione, Neptune espone un’API REST-style con il suo client. Il client può essere scaricato e installato tramite pip o qualsiasi altro strumento di dipendenza di Python. L’API è decentemente documentata e abbastanza facile da comprendere.

Lo strumento è a pagamento e ha un piano di prezzi semplice diviso in tre categorie. Tuttavia, se lo hai bisogno solo per un progetto personale o sei nell’unità di ricerca o accademica, puoi richiedere di utilizzare lo strumento gratuitamente.

Neptune.ai è uno strumento nuovo, quindi alcune funzionalità conosciute da altri strumenti di tracciamento degli esperimenti potrebbero non essere presenti. Nonostante questo fatto, il supporto di Neptune.ai è sempre pronto a reagire ai feedback degli utenti e implementare funzionalità mancanti – almeno, è stata questa la nostra esperienza poiché utilizziamo Neptune.ai ampiamente in The Codos Project.

Weights & Biases

Conosciuto anche come WandB o W&B, si tratta di uno strumento basato sul web che espone tutte le funzionalità necessarie per essere utilizzato come strumento di tracciamento degli esperimenti e registro dei modelli. Espone un insieme più o meno simile di funzionalità come neptune.ai.

Tuttavia, Weights & Biases sembra avere una migliore visualizzazione e, in generale, è uno strumento più maturo rispetto a Neptune. Inoltre, WandB sembra essere più incentrato su progetti individuali e ricercatori, con meno enfasi sulla collaborazione.

Ha anche un piano di prezzi semplice diviso in 3 categorie con un livello gratuito per l’uso privato. Tuttavia, W&B ha lo stesso approccio di Neptune nei confronti dei ricercatori e delle unità accademiche: possono sempre utilizzare Weights & Biases gratuitamente.

Weights & Biases espone anche un’API REST-like per facilitare il processo di integrazione. Sembra essere meglio documentato e offre più funzionalità rispetto a quello esposto da Neptune.ai. Ciò che è curioso è che espone la libreria client scritta in Java – se, per qualche motivo, hai scritto un modello di machine learning in Java anziché Python.

TensorBoard

È un toolkit di visualizzazione dedicato per l’ecosistema TensorFlow. È principalmente progettato per funzionare come strumento di tracciamento degli esperimenti con un focus sulla visualizzazione delle metriche. Nonostante sia uno strumento dedicato a TensorFlow, può essere utilizzato anche con Keras (non sorprendentemente) e PyTorch.

Inoltre, è l’unico strumento gratuito tra i tre descritti in questa sezione. Qui è possibile ospitare e tracciare i propri esperimenti. Tuttavia, TensorBoard non dispone delle funzionalità responsabili del registro dei modelli, il che può essere piuttosto problematico e costringerti a utilizzare qualche strumento di terze parti per coprire questa funzionalità mancante. Comunque, ci sarà sicuramente uno strumento per questo nell’ecosistema TensorFlow.

Essendo una parte integrante dell’ecosistema TensorFlow, la sua integrazione con Keras o TensorFlow è molto più fluida rispetto ai primi due strumenti.

Librerie Specifiche per il Problema

tsaug

Una delle poche librerie per l’aumento delle serie temporali, è una libreria open-source creata e mantenuta da una singola persona con il nome di GitHub nick tailaiw, rilasciata nel 2019 e attualmente nella versione 0.2.1. Fornisce un insieme di 9 aumenti; Crop, Add Noise o TimeWrap, tra gli altri. La libreria è ragionevolmente ben documentata per un progetto del genere e facile da usare dal punto di vista dell’utente.

Sfortunatamente, per motivi sconosciuti (almeno per me), la libreria sembra essere morta e non è stata aggiornata da 3 anni. Ci sono molti problemi aperti ma non stanno ricevendo attenzione. Una situazione piuttosto triste secondo me, poiché non ci sono moltissime altre librerie che forniscono l’aumento dei dati a serie temporali.

Tuttavia, se stai cercando una libreria più aggiornata per l’analisi dei dati o l’aumento delle serie temporali, Tsfresh potrebbe essere una buona scelta.

OpenCV

È una libreria focalizzata sulla fornitura di funzioni per lavorare con l’elaborazione delle immagini e la visione artificiale. Sviluppata da Intel, ora è open source basata sulla licenza Apache 2.

OpenCV fornisce un insieme di funzioni relative all’elaborazione di immagini e video, all’analisi dei dati di classificazione delle immagini e al tracciamento, insieme a modelli di apprendimento automatico predefiniti per lavorare con immagini e video.

Se vuoi leggere di più su OpenCV, il mio collega, Kamil Rzechowski, ha scritto un articolo che descrive abbastanza approfonditamente l’argomento.

GeoPandas

È una libreria costruita sopra pandas che mira a fornire funzioni per lavorare con strutture spaziali e dati. Consente una facile lettura e scrittura dei dati nei formati GeJSON, shapefile o lettura dei dati dai sistemi PostGIS. Oltre a pandas, ha molte altre dipendenze dalle librerie di dati spaziali come PyGEOS, GeoPy o Shapely.

La struttura di base della libreria è la seguente:

  • GeoSeries – Una colonna di dati geospaziali, come una serie di punti, linee o poligoni
  • GeoDataFrame – Struttura tabulare che contiene un insieme di GeoSeries

Utils

Matplotlib

Come suggerisce il nome, è una libreria per creare vari tipi di grafici ;p. Oltre ai grafici di base come linee o istogrammi, matplotlib ci consente di creare grafici più complessi: forme 3D o grafici polari. Naturalmente, ci consente anche di personalizzare cose come i grafici a colori o le etichette.

Nonostante sia un po’ vecchia (rilasciata nel 2003, quindi ha 20 anni al momento della scrittura), è attivamente mantenuta e sviluppata. Con circa 17k stelle su GitHub, ha una comunità piuttosto ampia attorno ad essa ed è probabilmente la seconda scelta per chiunque abbia bisogno di uno strumento di visualizzazione dei dati.

È ben documentata e abbastanza facile da comprendere per un principiante. È anche importante notare che matplotlib viene utilizzata come base per librerie di visualizzazione più avanzate.

Seaborn

Parlando di questo, abbiamo Seaborn come esempio di tale libreria. Quindi, il set di funzionalità fornite da Seaborn è simile a quello fornito da Matplotlib.

Tuttavia, l’API è più avanzata e richiede meno codice di base per ottenere risultati simili. Per altre differenze minori, la palette di colori fornita da Seaborn è più morbida e il design dei grafici è più moderno e piacevole. Inoltre, Seaborn è più facile da integrare con pandas, il che può essere un vantaggio significativo.

Di seguito puoi trovare il codice utilizzato per creare una mappa di calore in Matplotlib e Seaborn, insieme ai grafici di output. Le importazioni sono comuni.

import matplotlib.pyplot as plt
import numpy as np
import seaborn as sns

data = np.random.rand(5, 5)

fig, ax = plt.subplots()
heatmap = ax.pcolor(data, cmap=plt.cm.Blues)

ax.set_xticks(np.arange(data.shape[0])+0.5, minor=False)
ax.set_yticks(np.arange(data.shape[1])+0.5, minor=False)

ax.set_xticklabels(np.arange(1, data.shape[0]+1), minor=False)
ax.set_yticklabels(np.arange(1, data.shape[1]+1), minor=False)

plt.title("Mappa di calore")
plt.xlabel("Asse X")
plt.ylabel("Asse Y")

cbar = plt.colorbar(heatmap)

plt.show()

sns.heatmap(data, cmap="Blues", annot=True)
# Imposta il titolo del grafico e le etichette degli assi
plt.title("Mappa di calore")
plt.xlabel("Asse X")
plt.ylabel("Asse Y")
# Mostra il grafico
plt.show()

Hydra

In ogni progetto, prima o poi, c’è la necessità di rendere configurabile qualcosa. Naturalmente, se stai usando un’attrezzatura come Jupyter, allora la questione è piuttosto semplice. Puoi semplicemente spostare un valore desiderato nel file .env – et voilà, è configurabile.

Tuttavia, se stai creando un’applicazione più standard, le cose non sono così semplici. Qui Hydra mostra la sua brutta (ma molto utile) faccia. È uno strumento open-source per la gestione e l’esecuzione di configurazioni di applicazioni basate su Python.

Si basa sulla libreria OmegaConf e citando dalla loro pagina principale: “La caratteristica chiave è la capacità di creare dinamicamente una configurazione gerarchica attraverso la composizione e sovrascriverla tramite file di configurazione e la riga di comando.”

Ciò che si è rivelato molto utile per me è la capacità descritta nella citazione sopra: la configurazione gerarchica. Nel mio caso, funzionava molto bene e permetteva una separazione più chiara dei file di configurazione.

coolname

Avere un identificatore unico per le esecuzioni di contaminazione è sempre una buona idea. Se, per varie ragioni, non ti piace UUID o semplicemente vuoi che i tuoi ID siano comprensibili dall’essere umano, coolname è la risposta. Genera identificatori unici basati su parole alfabetiche di varie lunghezze, da 2 a 4 parole.

Per quanto riguarda il numero di combinazioni, è più o meno così:

  • L’identificatore di lunghezza 4 parole ha 1010 combinazioni
  • L’identificatore di lunghezza 3 parole ha 108 combinazioni
  • L’identificatore di lunghezza 2 parole ha 105 combinazioni

Il numero è significativamente inferiore rispetto al caso di UUID, quindi la probabilità di collisione è anche maggiore. Tuttavia, confrontare i due non è lo scopo di questo testo.

Il vocabolario è selezionato a mano dagli autori. Tuttavia, lo hanno descritto come positivo e neutro (maggiori informazioni qui), quindi non vedrai un identificatore come tu-brutto-inesperto-essere-umano. Naturalmente, la libreria è completamente open source.

tqdm

Questa libreria fornisce una barra di avanzamento per la tua applicazione. Nonostante il fatto che avere queste informazioni visualizzate potrebbe non essere la cosa più importante di cui hai bisogno, è comunque bello da guardare e controllare il progresso fatto dalla tua applicazione durante l’esecuzione di un’attività importante.

Tqdm utilizza anche algoritmi complessi per stimare il tempo rimanente di un’attività particolare, il che potrebbe essere un elemento determinante e aiutarti ad organizzare il tuo tempo. Inoltre, tqdm afferma che ha un impatto sulle prestazioni praticamente impercettibile, nell’ordine dei nanosecondi.

Inoltre, è completamente autonomo e ha bisogno solo di Python per essere eseguito. Quindi non scaricherà metà di internet sul tuo disco.

Jupyter Notebook (+JupyterLab)

I notebook sono un ottimo modo per condividere risultati e lavorare sul progetto. Attraverso il concetto di celle, è facile separare diversi frammenti e responsabilità del tuo codice.

Inoltre, il fatto che un singolo file di notebook possa contenere codice, immagini e output di testo complessi (tabelle) insieme, aggiunge solo ai suoi vantaggi esistenti.

Inoltre, i notebook consentono di eseguire pip install all’interno delle celle e di utilizzare file .env per la configurazione. Questo approccio sposta molta complessità dell’ingegneria del software fuori strada.

Sommario

Queste sono tutte le diverse librerie per l’apprendimento automatico che volevo descriverti. Ho cercato di fornire una panoramica generale di tutte le librerie insieme ai loro possibili casi d’uso, arricchiti da una breve nota sulla mia esperienza nell’utilizzarle. Spero che il mio obiettivo sia stato raggiunto e che questo articolo approfondisca la tua conoscenza del panorama delle librerie per l’apprendimento automatico.