Si è conclusa da poco la terza edizione del TensorFlow Dev Summit, l'evento annuale dedicato al framework di machine learning targato Google. Tra le novità principali sicuramente il rilascio di TensorFlow 2.0 versione alpha, tool per l'aggiornamento automatico da TF 1.x a TF 2.0, oltre a tantissimi rilasci aggiuntivi nell'ecosistema. In questo articolo facciamo il punto sulle news principali e diamo un'occhiata al nuovissimo TF 2.0.
Cominciamo ovviamente da TensorFlow 2.0, che può essere già installato in alpha ed il cui rilascio ufficiale è programmato per i prossimi mesi (più sotto invece parliamo di come fare l'upgrade del proprio codice):
- Novità principale, anticipata da molto, è che la eager execution diventa la modalità di utilizzo predefinita di TF. Tutte le operazioni sono quindi eseguite dinamicamente appena definite, esattamente come già succede in NumPy:
import tensorflow as tf
print(tf.constant(3.0) + tf.constant(2.0))
# Ritorna: tf.Tensor(5.0, shape=(), dtype=float32)
- A seguito di questo, spariscono completamente le sessioni! Per ottimizzare blocchi di codice, è ora possibile compilarli dinamicamente con un meccanismo simile al JIT compiler di PyTorch:
@tf.function
def f(x):
return tf.reduce_sum(x)
f(tf.random.uniform((3, 2))) # Crea un grafo tf.Graph la prima volta che viene eseguita!
-
Un refactoring complessivo delle API a disposizione dell'utente:
-
Keras, presente in
tf.keras
, diventa il meccanismo preferito per la definizione dei modelli e si integra ora alla perfezione in TF, mentre gli Estimator rimangono opzioni "già pronte" con tantissimi parametri aggiuntivi per il training su larga scala ed il deploy. In alternativa, possiamo costruire modelli Keras ma ottimizzarli "a mano" scrivendo il proprio loop di training. Rimane infine la possibilità di definire Estimator di tipo custom (anche se passa in secondo piano rispetto a Keras), e di convertire in automatico modelli Keras in oggetti di tipo Estimator. -
Sparisce
tf.contrib
, le cui funzionalità vengono cancellate, spostate nel core, oppure spostate nel nuovo TensorFlow addons (es., l'ottimizzatoreLazyAdamOptimizer
). - Aumenta l'interoperabilità tra i componenti di TF: ad esempio possiamo usare Keras in modalità eager con il nuovo flag
run_eagerly
, o usaretf.distributed
per parallelizzare il codice sia in Keras che con gli Estimator (es., vedi esempio sulla documentazione).
-
Quest'ultimo aspetto è particolarmente semplice: ad esempio, possiamo replicare il training in parallelo su più GPU semplicemente creando un modello ed allenandolo all'interno di uno scope predefinito, come nel codice qui sotto.
with tf.distribute.MirroredStrategy().scope():
# Model definition...
model = tf.keras.models.Model(inputs=inputs, outputs=predictions)
# Model training...
Come per qualsiasi rilascio che comporta cambiamenti così grandi, la possibilità di trasportare facilmente il proprio codice da una versione più vecchia è essenziale. Vediamo gli strumenti che abbiamo a disposizione, descritti nella compatibility guide:
- Prima di tutto, il codice eliminato dalla versione 1.x (non presente in contrib) è per ora presente in via temporanea all'interno di un sotto-modulo
tf.compat.v1
. Ad esempio, volendo accedere all'AdamOptimizer
prima disponibile intf.train
(ora eliminato in favore di quello disponibile in Keras):
from tensorflow.compat import v1
adam = v1.train.AdamOptimizer()
-
TensorFlow mette a disposizione un upgrade script in grado di convertire automaticamente il codice, sostituendo in certi casi le chiamate con quelle aggiornate, oppure con la versione corrispondente nel modulo
tf.compat.v1
. - Trovate online anche una guida ufficiale su come scrivere codice TF 2.0.
Oltre a TensorFlow 2.0 per Python, il DevSummit è stato pieno di interessanti rilasci aggiuntivi:
-
TensorFlow Datasets, una collezione di dataset già pronti disponibili nel formato
tf.data.Dataset
. -
La prima versione stabile 1.0 di TensorFlow.js per lavorare in Javascript.
-
La versione 0.2 di Swift for TensorFlow, che integra nativamente TF dentro il linguaggio di programmazione Swift. Ci sono numerosi aspetti interessanti di questa nuova libreria: ad esempio, la differenziazione automatica diventa una feature di prima classe del linguaggio, e possiamo richiamare in maniera trasparente qualsiasi libreria Python dal codice.
-
Nuovi rilasci anche per TensorFlow Hub, la libreria di componenti già pronti ed allenati di TF. Tra le novità più interessanti, segnaliamo KerasLayer, che permette di importare un oggetto da TF Hub direttamente in un modello Keras.
- Alcune novità interessanti anche sulla TensorBoard, che ora supporta la possibilità di visualizzare in maniera interattiva le run relative a diversi iperparametri, come possiamo vedere nel video qui sotto.
- Tantissimi rilasci anche per TensorFlow Extended, la piattaforma di deployment end-to-end di TensorFlow.
Ci sono tantissimi rilasci aggiuntivi che non abbiamo il modo di coprire adeguatamente in questo breve riassunto. Tra gli altri, vi segnaliamo però TensorFlow probability per la programmazione probabilistica, TensorFlow privacy per allenare modelli con garanzie di privacy, TensorFlow Federated, e Sonnet 2.0 da parte di DeepMind.
Anche a livello di community sono tantissime le novità di TensorFlow, annunciate o già provate nelle settimane scorse e consolidate al Dev Summit. Tra queste, un nuovissimo sito ufficiale, una serie di user groups e special interest groups, ed infine un nuovissimo bug tracker per tenere traccia dei bug della versione 2.0.
- Prima di tutto vi consigliamo un giro sul nuovissimo sito, che ha numerosi esempi, tutorial, e notebook aggiuntivi.
- Sul blog di TensorFlow trovate un recap della conferenza, e tutti i video sono già disponibili su YouTube. Le varie community Google in giro per il mondo organizzano degli extended per guardare insieme il Dev Summit: noi ne abbiamo uno in programma il 19 Marzo a Roma con una speaker direttamente dal Dev Summit.
A noi piace moltissimo questa immagine, che mostra in maniera molto schematica come interagiscono molti componenti del nuovo ecosistema TensorFlow (senza considerare TF Extended):
Ovviamente, il nostro consiglio principale è quello di continuare a seguirci, perché approfondiremo a breve alcune delle nuove feature di TF 2.0!
Per chiudere, non possiamo non sottolineare che la prima giornata del Dev Summit si è conclusa parlando di un progetto tutto italiano, In Codice Ratio, di cui abbiamo già visto in precedenza sul blog. Ne siamo (indirettamente) estremamente orgogliosi e vi lasciamo con il video della presentazione.
Se questo articolo ti è piaciuto e vuoi tenerti aggiornato sulle nostre attività, ricordati che l'iscrizione all'Italian Association for Machine Learning è gratuita! Puoi seguirci anche su Facebook, LinkedIn, e Twitter.