Conversione del modello

TensorFlow.js viene fornito con una varietà di modelli preaddestrati pronti per l'uso nel browser: puoi trovarli nel nostro repository di modelli . Tuttavia potresti aver trovato o creato altrove un modello TensorFlow che desideri utilizzare nella tua applicazione web. TensorFlow.js fornisce un convertitore di modelli a questo scopo. Il convertitore TensorFlow.js ha due componenti:

  1. Un'utilità della riga di comando che converte i modelli Keras e TensorFlow da utilizzare in TensorFlow.js.
  2. Un'API per caricare ed eseguire il modello nel browser con TensorFlow.js.

Converti il ​​tuo modello

Il convertitore TensorFlow.js funziona con diversi formati di modello:

SavedModel : questo è il formato predefinito in cui vengono salvati i modelli TensorFlow. Il formato SavedModel è documentato qui .

Modello Keras : i modelli Keras vengono generalmente salvati come file HDF5. Ulteriori informazioni sul salvataggio dei modelli Keras possono essere trovate qui .

Modulo TensorFlow Hub : si tratta di modelli che sono stati confezionati per la distribuzione su TensorFlow Hub, una piattaforma per la condivisione e la scoperta di modelli. La libreria dei modelli può essere trovata qui .

A seconda del tipo di modello che stai tentando di convertire, dovrai passare argomenti diversi al convertitore. Ad esempio, supponiamo che tu abbia salvato un modello Keras denominato model.h5 nella tua directory tmp/ . Per convertire il tuo modello utilizzando il convertitore TensorFlow.js, puoi eseguire il seguente comando:

$ tensorflowjs_converter --input_format=keras /tmp/model.h5 /tmp/tfjs_model

Questo convertirà il modello in /tmp/model.h5 e genererà un file model.json insieme ai file di peso binario nella directory tmp/tfjs_model/ .

Maggiori dettagli sugli argomenti della riga di comando corrispondenti ai diversi formati del modello sono disponibili nel README del convertitore TensorFlow.js.

Durante il processo di conversione attraversiamo il grafico del modello e controlliamo che ogni operazione sia supportata da TensorFlow.js. Se è così, scriviamo il grafico in un formato che il browser può utilizzare. Cerchiamo di ottimizzare il modello per essere servito sul Web suddividendo i pesi in file da 4 MB, in questo modo possono essere memorizzati nella cache dai browser. Cerchiamo anche di semplificare il grafico del modello stesso utilizzando il progetto Grappler open source. Le semplificazioni dei grafici includono il raggruppamento di operazioni adiacenti, l'eliminazione di sottografi comuni, ecc. Queste modifiche non hanno alcun effetto sull'output del modello. Per un'ulteriore ottimizzazione, gli utenti possono passare un argomento che indica al convertitore di quantizzare il modello su una determinata dimensione in byte. La quantizzazione è una tecnica per ridurre le dimensioni del modello rappresentando i pesi con meno bit. Gli utenti devono fare attenzione a garantire che il loro modello mantenga un grado accettabile di precisione dopo la quantizzazione.

Se incontriamo un'operazione non supportata durante la conversione, il processo fallisce e stampiamo il nome dell'operazione per l'utente. Sentiti libero di inviare un problema sul nostro GitHub per farcelo sapere: proviamo a implementare nuove operazioni in risposta alla domanda degli utenti.

Migliori pratiche

Sebbene facciamo ogni sforzo per ottimizzare il tuo modello durante la conversione, spesso il modo migliore per garantire che il tuo modello funzioni bene è costruirlo pensando ad ambienti con risorse limitate. Ciò significa evitare architetture eccessivamente complesse e ridurre al minimo il numero di parametri (pesi) quando possibile.

Esegui il tuo modello

Dopo aver convertito con successo il tuo modello, ti ritroverai con una serie di file di peso e un file di topologia del modello. TensorFlow.js fornisce API di caricamento del modello che puoi utilizzare per recuperare queste risorse del modello ed eseguire l'inferenza nel browser.

Ecco come appare l'API per un modulo TensorFlow SavedModel o TensorFlow Hub convertito:

const model = await tf.loadGraphModel(path/to/model.json);

Ed ecco come appare per un modello Keras convertito:

const model = await tf.loadLayersModel(path/to/model.json);

L'API tf.loadGraphModel restituisce un tf.FrozenModel , il che significa che i parametri sono fissi e non sarai in grado di mettere a punto il tuo modello con nuovi dati. L'API tf.loadLayersModel restituisce un tf.Model, che può essere addestrato. Per informazioni su come addestrare un tf.Model, fare riferimento alla guida sui modelli di treno .

Dopo la conversione, è una buona idea eseguire l'inferenza alcune volte e valutare la velocità del modello. Abbiamo una pagina di benchmarking autonoma che può essere utilizzata per questo scopo: https://tensorflow.github.io/tfjs/e2e/benchmarks/local-benchmark/index.html Potresti notare che scartiamo le misurazioni da una corsa di riscaldamento iniziale - questo perché (in generale) la prima inferenza del tuo modello sarà molte volte più lenta delle inferenze successive a causa del sovraccarico della creazione di trame e della compilazione degli shader.