Python: cos’è, a cosa serve e come programmare con Python

A cosa serve Python? Quando bisognerebbe imparare a usarlo, quando invece non andrebbe usato. Ecco tutti i segreti di un linguaggio orientato agli oggetti, adatto a sviluppare applicazioni distribuite, scripting, di computazione numerica e system testing. [...]
  1. Home
  2. Intelligenza Artificiale
  3. Python: cos’è, a cosa serve e come programmare con Python

Python è uno dei linguaggi di programmazione più popolari degli ultimi anni. La sua chiara sintassi e la leggibilità lo rendono il linguaggio di codifica perfetto per i principianti. È giusto pensare che la facilità di apprendimento di Python sia stato il potenziale essenziale alla base del suo ampio utilizzo. Ma questo solleva una domanda di discrimine: quando è che Python non è la risposta giusta? In altre parole quali sono i chiari segnali che Python non è il linguaggio giusto da imparare e/o usare?

Cos’è e a cosa serve Python (programmare Machine Learning e AI)

Sempre più spesso si legge di Python come di un linguaggio direttamente o indirettamente strumentale al machine learning, in sostanza un linguaggio “per” il machine learning. La maggior parte dei corsi machine learning sono stati scritti usando il linguaggio Python e l’educazione alla codifica nel suo insieme ha adottato Python come la lingua da imparare, con ampio uso nei corsi dedicati a small computer come Raspberry Pi (AMD) o su altri core.

Questa tendenza, unita alla pletora di grandi aziende che usano o mostrano l’usabilità dei loro prodotti con Python, lasciano pensare che sia il principale linguaggio di programmazione del futuro. In pratica una specie di coltellino svizzero. La domanda a cui ci proponiamo di rispondere in questa prima parte è: a cosa non serve, un tale “utensile”? Analizziamo di seguito i vari campi di applicazione.

Python per la programmazione e sviluppo di siti web

Python è più che capace di consentire uno sviluppo web su larga scala. Instagram è il sito più grande che esegue Django, che è un framework web di Python: un back-end. Questa non è un’impresa da poco, come spiega Zekun Li, ingegnere di Instagram: “Abbiamo iniziato a utilizzare Python sin dall’inizio per la sua semplicità, ma negli anni abbiamo dovuto fare molti hack per mantenerlo semplice quando abbiamo scalato l’architettura”.

Detto questo, rimane che Django è un framework robusto ed elegante, e quindi il problema non sta nelle sue carenze intese come mancanze di feature. La semplice domanda è: perché imparare ad adottare Django quando JavaScript è ancora così dominante e consente una scalabilità totale? I framework JavaScript come React e Vue.js sono molto richiesti, se proprio si vuole continuare a usare Django sono entrambi in grado di usarlo o usare altri back-end come RubyOnRails. Tuttavia, poiché entrambi i linguaggi sono basati su JavaScript, perché dovresti usare qualcosa di diverso da Node.js? L’uso di Node.js completerebbe il quadro e renderebbe un’applicazione JavaScript full stack. Rendendo il JavaScript, il linguaggio che dovrebbe essere imparato fino al padroneggiamento completo. Che è fondamentalmente diverso, anche qui di nuovo, dal sostenere che JavaScript sia un linguaggio perfetto; molti sosterrebbero il contrario. Se si sta iniziando uno sviluppo web, tuttavia, non c’è ancora scelta migliore di JavaScript.

Python per sviluppare Video Games (es. con Unity)

Gli utenti di Pygame potrebbero trovare questo paragrafo un po’ contraddittorio. Esiste dunque una libreria elettiva, considerata appositamente per la creazione di giochi per computer in Python? Sì, c’è e Pygame è una risorsa fantastica per l’apprendimento di Python e delle meccaniche di gioco. Tra l’altro, occorre ricordare che alcuni buoni giochi sono stati scritti in Python e c’è persino uno sparatutto in prima persona realizzato interamente in Pygame: “Duga”, molto popolare. Ma senza voler nulla togliere all’incredibile risultato di preferenza di “Duga”, possiamo invece identificare un problema qui: la maggior parte (ma non tutte) le persone che vogliono entrare nello sviluppo del gioco stanno cercando “qualcosa di più”. Una piattaforma solida, con strumenti di sviluppo, e un editor. Il potenziale per passare da una piccola idea a qualcosa di grande e più mainstream. Ma, di nuovo, il linguaggio che abbiamo scelto, Python, non è pensato per scalare e arrivare ad offrire anche queste feature “industriali”, almeno non danto quanto dei veri e propri motori di gioco come Unity e Unreal possono farlo. Ma Unity si basa esclusivamente su C#, con un considerevole numero di librerie in cima per aiutare lo sviluppo del gioco. L’editor, Unity, è ancorché un editor, uno strumento molto potente che consente la prototipazione rapida e un avvio rapido per i principianti che realizzano il loro primo gioco. Per poter confrontare scala e bellezza visiva, Escape From Tarkov è una creazione di Unity Engine da confrontare con Duga.

Proprio come i tutorial Python di basso livello coprono gli elementi essenziali della programmazione, i tutorial ufficiali di Unity non presuppongono alcuna conoscenza di programmazione precedente.

Il C ++ è in qualche modo noto per essere se non proprio “difficile” sicuramente lungo e farraginoso da imparare. È vero, esistono risorse online per i principianti, e il sito Web Unreal Engine ha anche degli ottimi strumenti per iniziare. Se hai bisogno di prove del fatto che i giochi Unreal Engine possano avere successo, non cercare oltre Fortnite. Questo gioco estremamente popolare, che puoi persino giocare sul tuo telefonino, è stato creato e ottimizzato con Unreal.

I giochi che assomigliano a questo, e funzionano a risoluzione 1080p con una buona frequenza dei fotogrammi, attualmente non sono possibili usando Python. Dobbiamo sottolineare che questo non può essere un fallimento da addebitare a Python, piuttosto un semplice caso di scalabilità verticale dello sviluppo di un gioco non essendo uno dei suoi punti di forza.

Python per lavorare con sistemi a livello-macchina

È facile notare, cercando in Rete, quanto la comunità di robotica amatoriale ami il Python, ma – udite udite – Python non è il linguaggio migliore per svolgere questi lavori. Quando i sistemi sono molti, di basso livello e molto integrati, ecco che Python non è più da tenere in considerazione.

Sistemi “embedded”: cosa sono e come funzionano (es. Arduino)

Dobbiamo riconoscere, ormai, che la definizione di cosa sia un sistema “embedded” è diventata sfocata negli ultimi anni, ma esiste tuttavia una buona analogia da considerare. Un sistema “embedded” dovrebbe essere sicuro da considerare proprio come quando si incorporano piccole schede di sviluppo hardware in un progetto come Arduino. Quando abbiamo invece da considerare dispositivi più grandi e complessi come Raspberry Pi o simili computer a scheda singola, non possiamo esattamente continuare a considerarli “embedded”: incorporati. E il problema sorge quando memoria e tempistica sono essenziali. Un chip a 8 bit in un componente hardware incorporato deve gestire la memoria con molta attenzione. Non è qualcosa per cui Python è proprio adatto, e c’è una ragione per cui il linguaggio Arduino è una versione semplificata di C/C ++. Lavorare con una versione comprensibile di un algoritmo scritta nel C++ di Arduino è meno complesso di quanto si pensi.

Il linguaggio di programmazione C è molto potente, ma è tanto potente quanto può essere pericoloso. Nonostante sia di alto livello, C e il suo super-set C ++ possono accedere a processi di basso livello e cambiare le impostazioni della macchina fino a scrivere nei registri hardware delle eprom di queste schede. Quindi possiamo dire che in sostanza, C è stata la prima traduzione del codice macchina in qualcosa che gli essere umani potevano facilmente scrivere, rileggere, correggere trasmettere e scambiare tra loro codice, con un buon livello di comprensione e manutenibilità.

Oltre alla capacità di gestire sistemi a basso livello, l’adozione del C comporta una grande capacità di aumento di velocità di esecuzione runtime. Poiché C è un linguaggio molto scheletrico, non ci sono aggravi generali di gestione di funzioni complesse o azioni di ripulitura dello stack o della memoria a pagine, (garbage collection) per rallentarlo. Ed è da questo che proviene la fama del C con la sua reputazione di “bello e pericoloso”, poiché perdite di memoria non gestite dal codice (non viene fatto memory recovery, continuamente e automaticamente) possono causare problemi gravi di funzionamento. Però ciò significa, per tutto ciò, che C brilla laddove tempismo e velocità sono fondamentali.

Chiunque cerchi di entrare nella programmazione hardware o in qualsiasi forma di programmazione del kernel dovrebbe considerare seriamente l’adozione del C. Lo stesso vale per chiunque desideri creare driver di dispositivo, connessioni a basso livello, macchine realtime, etc.

Perché passare a Python come linguaggio di programmazione

Poniamoci un’ultima domanda ovvia: conosci perfettamente un altro linguaggio di programmazione potente, perché cambiare? Probabilmente avevi già frequentato un corso di programmazione, o hai iniziato un corso di programmazione online su un particolare linguaggio, attenersi ad un percorso già iniziato ha dei vantaggi: l’apprendimento di un primo linguaggio fornisce i fondamentali della programmazione e il passaggio all’apprendimento di una sintassi completamente nuova impatterà sulla tua formazione e rallenterà la curva di apprendimento di questo strumento verso un modello maturo di adozione.

Consideriamo anche, che l’accesso alla programmazione concesso dal Python alla maggior parte dei programmatori di livello superiore non comportato l’apprendimento di un linguaggio a basso livello o “diverso”. Grazie alla sua natura altamente leggibile e alla sintassi intuitiva, molti trovano più facile imparare Python.

Imparare Python: skill, corsi e cosa ti serve

Ci sono così tanti linguaggi in giro che la scelta può essere difficile e stressante. Ma in questo articolo abbiamo sostanzialmente puntato l’attenzione sul fatto che non potrà mai esserci un linguaggio perfetto per tutto così come non esiste un attrezzo meccanico perfetto per tutto: esiste il giravite, il martello, la chiave inglese: e come per questi strumenti, concepire un oggetto basandosi su colla e chiodi è diverso dal concepirlo con assi e bulloni. E come per questi artefatti, realizzare un oggetto in legno incontrerà dei limiti strutturali superabili soltanto con nuove strutture fatte di ferro e bulloni.

Come utilizzare Python per l’intelligenza artificiale

Di recente, è innegabile che sempre più venga indicato il Python come linguaggio-collante per applicazioni che richiamano moduli di machine learning adatti a realizzare sistemi cosidetti di AI. Anzi, in particolar modo per il machine learning e il deep learning, il Python offre, pur essendo un linguaggio di programmazione interpretato (lento), alcuni buoni motivi per usarlo:

  • Python può accedere a molte librerie esterne (moduli) con funzioni utili per il calcolo scientifico. Si evita così di doverle sviluppare ex novo. Le librerie esterne del Python sono spesso sviluppate con altri linguaggi compilati di alto livello come il linguaggio C e Fortran. Pertanto, sono molto veloci nell’esecuzione.
  • Il linguaggio Python è simile al linguaggio naturale (lingua inglese).
  • È molto più facile da usare rispetto agli altri linguaggi di programmazione come C o Java

Python e le librerie principali per il machine learning

Python è un linguaggio di programmazione ad alto livello, orientato agli oggetti, adatto, tra gli altri usi, a sviluppare applicazioni distribuite, scripting, computazione numerica e system testing. Fu ideato da Guido van Rossum all’inizio degli anni novanta. Il nome fu scelto per via della passione di van Rossum per i Monty Python e per la loro serie televisiva Monty Python’s Flying Circus. Python è spesso paragonato a Ruby, Tcl, Perl, Java, JavaScript, Visual Basic o Scheme. È un linguaggio multi-paradigma (supporta cioè object oriented, la programmazione strutturata e molte caratteristiche di programmazione funzionale e riflessione) che ha tra i principali obiettivi: dinamicità, semplicità e flessibilità.

WHITEPAPER
Vita da CEO: quali sono gli strumenti necessari ai manager per vincere le sfide professionali
CIO
Digital Transformation

Le caratteristiche più immediatamente riconoscibili di Python sono le variabili non tipizzate e l’uso dell’indentazione per la definizione delle specifiche. Altre caratteristiche distintive sono l’overloading di operatori e funzioni tramite delegation, la presenza di un ricco assortimento di tipi e funzioni di base e librerie standard, sintassi avanzate quali slicing e list comprehension.

Il controllo dei tipi è forte (strong typing) e viene eseguito a runtime (dynamic typing): una variabile è un contenitore a cui viene associata un’etichetta (il nome) che può essere associata a diversi contenitori anche di tipo diverso durante il suo tempo di vita. Usa un garbage collector per la liberazione automatica della memoria.

Ha qualche somiglianza con Perl, ma i suoi progettisti hanno scelto una sintassi più essenziale e uniforme con l’obiettivo di aumentare la leggibilità del codice. Analogamente a Perl è classificato spesso come linguaggio di scripting, ma pur essendo utile per scrivere script di sistema, in alternativa per esempio a Bash, la grande quantità di librerie disponibili e la facilità con cui il linguaggio permette di scrivere software modulare favoriscono anche lo sviluppo di applicazioni molto complesse.

Sebbene Python venga in genere considerato un linguaggio interpretato, in realtà il codice sorgente non viene convertito direttamente in linguaggio macchina. Infatti passa prima da una fase di pre-compilazione in bytecode, che viene quasi sempre riutilizzato dopo la prima esecuzione del programma, evitando così di reinterpretare ogni volta il sorgente e incrementando le prestazioni. Inoltre è possibile distribuire programmi Python direttamente in bytecode, saltando totalmente la fase di interpretazione da parte dell’utilizzatore finale e ottenendo programmi Python a sorgente chiuso.

Come il Lisp e a differenza del Perl, l’interprete Python supporta anche un modo d’uso interattivo (Repl) attraverso cui è possibile inserire codice direttamente da un terminale, visualizzando immediatamente il risultato. Inoltre l’interprete è contenuto nella libreria standard e come in molti altri linguaggi interpretati è possibile far valutare stringhe arbitrarie nel contesto corrente. È possibile passare all’interprete anche un contesto completamente diverso, sotto forma di liste che contengono l’elenco dei simboli definiti. Python dispone anche di un framework per lo unit testing che supporta lo sviluppo di test unitari automatici.

Questo è possibile anche grazie all’ampio set di librerie, ossia insiemi di routine e funzioni scritte che svolgono un determinato compito, che possiede e può richiamare a seconda delle necessità. Le librerie vengono spesso confuse con i termini framework e packages. Prima di vedere quali sono le più diffuse per il machine learning, vediamo di distinguere i termini tenendo conto di quanto stabilito dalla documentazione presente sul sito di Python.

Librerie standard e non per Python

Python ha una vasta libreria standard, il che lo rende adatto a molti impieghi. Oltre ai moduli della libreria standard se ne possono aggiungere altri scritti in C oppure Python per soddisfare le proprie esigenze particolari. Tra i moduli già disponibili ve ne sono per scrivere applicazioni web: sono supportati Mime, Http e tutti gli altri standard Internet. Sono anche disponibili moduli per creare applicazioni con interfaccia grafica, per connettersi a database relazionali, per usare le espressioni regolari. La libreria standard è uno dei punti forti di Python. Infatti essa è compatibile con tutte le piattaforme, a eccezione di poche funzioni, segnalate chiaramente nella documentazione come specifiche di una piattaforma particolare. La libreria può essere vista come un insieme di moduli dove ogni modulo contiene delle istruzioni e definizioni semplici. L’accorpamento di vari moduli, quindi di codice istruzioni, costituisce una libreria. Spesso i moduli sono già stati scritti da altri sviluppatori, e non c’è bisogno di ripartire da capo ogni volta. Il loro scopo è quello di semplificare le attività, aiutando gli sviluppatori a scrivere solo poche righe anziché una grande quantità di comandi. Il codice delle librerie richiama classi e metodi che normalmente definiscono operazioni specifiche in un’area del dominio. Ad esempio, ci sono alcune librerie di matematica che possono far sì che lo sviluppatore chiami semplicemente la funzione senza ripetere l’implementazione di come funziona un algoritmo.

Packages di Python

Per capire cosa sono i packages si può immaginare la struttura delle directory dove i file vengono memorizzati sul disco del computer. Di solito non archiviamo tutti i nostri file nella stessa posizione. Utilizziamo una gerarchia di directory ben organizzata per un accesso più semplice. File simili sono tenuti nella stessa directory, ad esempio, potremmo conservare tutti i brani musicali nella directory “musica”. Analogamente a questo, Python ha packages per directory e moduli per i file. Dato che una directory può contenere sottodirectory e file, similmente, un pacchetto Python può avere sotto-pacchetti e moduli. Per fare in modo che Python consideri come un package una directory, questa deve contenere un file chiamato __init__.py . Questo file può essere lasciato vuoto ma generalmente il codice di inizializzazione per quel pacchetto viene inserito in questo file.

Framework di Python

A differenza delle librerie, per framework si intende ”un’astrazione, in cui il software che fornisce funzionalità generiche può essere modificato selettivamente da un ulteriore codice scritto dall’utente, fornendo così un software specifico per l’applicazione“. Si può considerare il framework come uno strumento software che fornisce un modo per creare ed eseguire applicazioni web e per farlo si avvale spesso di librerie e packages. Utilizzando un framework web non è necessario scrivere codice per conto proprio e perdere tempo cercando possibili errori di calcolo e bug. All’inizio dello sviluppo web, tutte le applicazioni erano codificate a mano e solo lo sviluppatore di una determinata app poteva cambiarlo o distribuirlo. I framework web hanno introdotto un modo semplice per uscire da questa trappola. Dal 1995, tutte le seccature legate al cambiamento della struttura di un’applicazione sono state messe in ordine a causa della comparsa di una prestazione generale, che ha coinciso con il momento in cui sono apparsi i linguaggi specifici del web. La loro varietà ora funziona bene sia per pagine web statiche che dinamiche. Possiamo avere due tipologie di Framework web:

  • Server-side: definito anche come framework back end, sono applicazioni software che facilitano la scrittura, la manutenzione e la scalabilità delle applicazioni web. Forniscono strumenti e librerie che semplificano le comuni attività di sviluppo Web, inclusi gli Url di routing ai gestori appropriati, l’interazione con i database, le sessioni di supporto e l’autorizzazione dell’utente, l’output di formattazione (ad esempio Html, Json, Xml) e il miglioramento della sicurezza dagli attacchi web.
  • Client-side: definito anche framework frontend, consiste in un pacchetto costituito da una struttura di file e cartelle di codice standard (Html, Css, documenti JS ecc.). Si occupa essenzialmente delle parti rivolte verso l’esterno di un sito o di un’applicazione web. In breve, ciò che un utente vede quando apre l’app.

Esiste una terza situazione (definita Full-stack Framework) che è la combinazione di entrambe le estremità frontend e backend. Uno sviluppatore full stack è un tuttofare. Sono responsabili per tutti i livelli di sviluppo, da come il server è impostato per il CSS relativo alla progettazione. C’è da dire che è complesso gestire entrambe le parti. Se inoltre si vuole conoscere la lista dei web frameworks scritti in linguaggio Phyton si può vedere il seguente link (uno dei più popolari è Django).

Le librerie più popolari nel machine learning

Vediamo ora quali che sono le librerie più importanti di Python utilizzate nel machine learning.

Scikit-learn

È una libreria open source di apprendimento automatico per il linguaggio di programmazione Python. Contiene algoritmi di classificazione, regressione e clustering (raggruppamento) e macchine a vettori di supporto, regressione logistica, classificatore bayesiano, k-mean e DBSCAN, ed è progettato per operare con le librerie NumPy e SciPy. Scikit-learn è attualmente sponsorizzato da Inria e talvolta da Google.

Pandas

È una libreria software scritta per il linguaggio di programmazione Python per la manipolazione e l’analisi dei dati. In particolare, offre strutture dati e operazioni per manipolare tabelle numeriche e serie temporali. È un software libero rilasciato sotto la licenza BSD a tre clausole. Il nome deriva dal termine “panel data”, termine econometrico per set di dati che include osservazioni su più periodi di tempo per gli stessi individui. Pandas è una libreria molto popolare per il recupero e la preparazione dei dati per l’uso futuro in altre librerie ML come Scikit-learn o Tensorflow. Permette inoltre di recuperare facilmente i dati da diverse fonti: database Sql, testo, Csv, Excel, file Json e molti altri formati meno popolari. Una volta che i dati sono in memoria, ci sono dozzine di operazioni diverse per analizzare, trasformare, recuperare i valori mancanti, pulire il set di dati, nonché operazioni tipo SQL e un set di funzioni statistiche per eseguire anche una semplice analisi.

NumPy

È una libreria open source per il linguaggio di programmazione Python, che aggiunge supporto a grandi matrici e array multidimensionali insieme a una vasta collezione di funzioni matematiche di alto livello per poter operare efficientemente su queste strutture dati. È stato creato nel 2005 da Travis Oliphant basandosi su Numeric di Jim Hugunin, sta per Numeric Python e rappresenta il pacchetto fondamentale per il calcolo scientifico con Python. NumPy è ovviamente una delle più grandi librerie di calcolo matematico e scientifico per Python. Una delle funzionalità più importanti di NumPy è la sua interfaccia Array. Questa interfaccia può essere utilizzata per esprimere immagini, onde sonore o altri flussi binari grezzi come matrici di numeri reali con dimensione N. La conoscenza di NumPy è molto importante per l’apprendimento automatico e la scienza dei dati.

Matplotlib

È una libreria per la creazione di grafici per il linguaggio di programmazione Python e la libreria matematica NumPy. Fornisce Api orientate agli oggetti che permettono di inserire grafici all’interno di applicativi usando toolkit Gui generici, come WxPython, Qt o GTK. C’è anche una interfaccia “pylab” procedurale basata su una macchina degli stati (come OpenGL) progettata per assomigliare a quella di Matlab. All’inizio la libreria venne fatta principalmente da John Hunter e distribuita sotto licenza di tipo Bsd.

Oggi matplotlib 1.2 (uscita il 9 novembre 2012) supporta sia python 2.7 che 3.2

L’apprendimento automatico migliore e più sofisticato è privo di significato se non puoi comunicarlo ad altre persone. Quindi, come si fa a trasformare effettivamente il valore da tutti questi dati che si hanno? È qui che Matplotlib viene in soccorso. È una libreria Python standard utilizzata per la creazione di diagrammi e grafici 3D. È piuttosto di basso livello, il che significa che richiede più comandi per generare grafici e figure piacevoli rispetto ad alcune librerie avanzate. Tuttavia, il rovescio della medaglia è la flessibilità. Con abbastanza comandi, puoi creare praticamente qualsiasi tipo di grafico che desideri con Matplotlib. È possibile creare diversi grafici, da istogrammi e grafici a dispersione a grafici con coordinate non cartesiane.

Theano

È una libreria open source di computazione numerica per il linguaggio di programmazione Python sviluppata da un gruppo di machine learning della Università di Montréal. In Theano i calcoli sono espressi usando una sintassi simile a NumPy e compilato per eseguire efficientemente sia su architetture Cpu che Gpu. Rappresenta una libreria Python che consente di valutare, ottimizzare e definire espressioni matematiche che coinvolgono efficacemente gli array multidimensionali (è simile a NumPy). Questa libreria ottimizza l’utilizzo della Cpu e della Gpu e migliora le prestazioni del calcolo intensivo dei dati, in quanto il codice Theano è scritto in modo tale da sfruttare il vantaggio di come funziona un compilatore del computer. È una delle librerie di deep learning più utilizzate fino a oggi, anche se l’ultima versione è stata rilasciata nel 2017.

TensorFlow

È una libreria software open source per l’apprendimento automatico (machine learning), che fornisce moduli sperimentati e ottimizzati, utili nella realizzazione di algoritmi per diversi tipi di compiti percettivi e di comprensione del linguaggio. È una seconda generazione di Api, utilizzata da una cinquantina di team attivi sia in ambiti di ricerca scientifica, sia in ambiti di produzione; è alla base di dozzine di prodotti commerciali Google come il riconoscimento vocale, Gmail, Google Foto, e Ricerca. Questi team hanno usato in precedenza DistBelief, la prima generazione di API. TensorFlow fu sviluppato dal team Google Brain e reso disponibile il 9 novembre 2015, nei termini della licenza open source Apache 2.0. Secondo diversi studi Tensorflow è una delle librerie più utilizzate da chi si affaccia nel mondo del deep learning. Tale libreria è stata sviluppato da Google, e quasi tutte le sue applicazioni utilizzano Tensorflow per l’apprendimento automatico. Se stai utilizzando le foto di Google o la ricerca vocale di Google, indirettamente stai utilizzando i modelli creati utilizzando Tensorflow. Tensorflow è solo un framework computazionale per esprimere algoritmi che coinvolgono un gran numero di operazioni di tensori, poiché le reti neurali possono essere espresse come grafici computazionali tramite una serie di operazioni sui tensori. I tensori sono matrici N-dimensionali che rappresentano i nostri dati.

Pytorch

È. una libreria open source per il machine learning basata su Torch, usata per applicazioni quali quelle per la computer vision e l’elaborazione del linguaggio naturale. È stato principalmente sviluppato dai laboratori di ricerca di Facebook’s AI (FAIR Facebook AI Research lab).

È un software anch’esso gratuito e open source rilasciato sotto licenza Bsd. Sebbene l’interfaccia di Python sia più elegante e abbia il focus primario dello sviluppo, PyTorch dispone anche di una interfaccia in C++.

Su PyTorch sono stati sviluppati una notevole quantità di pezzi di software dedicati al Deep Learning, inclusi Uber’s Pyro, HuggingFace’s Transformers and Catalyst.

PyTorch fornisce due caratteristiche fondamentali di alto livello:

  • Elaborazione Tensoriale, (esattamente come NumPy) con una forte accelerabilità su Gpu (Graphics processing units)
  • Deep neural networks basato su sistema embedded di algebra autodifferenziante

La libreria è focalizzata sul portare agli utenti un’esperienza di modellazione veloce e flessibile e ha ottenuto molta trazione nella comunità di Deep Learning. Rispetto a Tensorflow, è più facile da imparare e da usare. Il rovescio della medaglia è che PyTorch è meno maturo di Tensorflow, ma la comunità sta crescendo rapidamente e ci sono già molti materiali didattici e tutorial.

Keras

È una libreria open source per l’apprendimento automatico e le reti neurali, scritta in Python. È progettata come un’interfaccia a un livello di astrazione superiore di altre librerie simili di più basso livello, e supporta come back-end le librerie TensorFlow, Microsoft Cognitive Toolkit (CNTK) e Theano. Progettata per permettere una rapida prototipazione di reti neurali profonde, si concentra sulla facilità d’uso, la modularità e l’estensibilità. È stata sviluppata come parte del progetto di ricerca Oneiros, e il suo autore principale è François Chollet, di Google

Nel 2017 il team di TensorFlow ha deciso di supportare Keras ufficialmente. Chollet ha spiegato che Keras è stata pensata come un’interfaccia e non come una libreria stand-alone. Offre una serie di moduli che permettono di sviluppare reti neurali profonde indipendentemente dal back-end utilizzato, con un linguaggio comune e intuitivo. Microsoft ha aggiunto un back-end a Cntk a partire dalla versione 2.0 di Cntk.

È una delle librerie di apprendimento automatico più interessanti e gli esperti consigliano di partire con questa libreria, a chi inizia a studiare il machine learning, poiché fornisce un modo più semplice per esprimere alcune configurazioni standard di reti neurali. Fornisce inoltre alcune utilità per l’elaborazione di set di dati, la compilazione di modelli, la valutazione dei risultati, la visualizzazione di grafici e molto altro. Gli attuali vantaggi di Keras, a differenza di PyTorch, sono che è più maturo, ha una community più grande e molti tutorial pronti all’uso. Inoltre, può utilizzare Tensorflow. D’altra parte, PyTorch fornisce alcune caratteristiche molto interessanti (come il debug interattivo o la definizione dinamica del grafico) e sta crescendo rapidamente.

Conclusioni sull’utilizzo di Python per scrivere codice informatico

WHITEPAPER
Quali sono i diversi approcci al Design Thinking e quali benefici producono?
CIO
Open Innovation

Apprendere un linguaggio completamente e profondamente è sicuramente un ottimo esercizio di stile, ma per studiare gli effetti applicativi di algoritmi e configurazioni di intelligenza artificiale, occorre partire da algoritmi di machine learning classici e concentrarsi maggiormente sulla loro specificità. Solo dopo aver ottenuto una buona comprensione dei vari metodi di sviluppo di comportamenti artificiali intelligenti, attraverso lo studio delle reti neurali e delle loro diverse numerose configurazioni e utilizzi, possiamo allora provare a rivolgerci a librerie preconfigurate come Tensorflow, PyTorch o Keras e inoltrarsi nel mondo del Deep Learning.

FacebookTwitterLinkedIn