Partecipa al simposio Women in ML il 7 dicembre Registrati ora

Conversione del modello

Mantieni tutto organizzato con le raccolte Salva e classifica i contenuti in base alle tue preferenze.

TensorFlow.js viene fornito con una varietà di modelli pre-addestrati che sono pronti per l'uso nel browser: possono essere trovati nel nostro repository di modelli . Tuttavia, potresti aver trovato o creato un modello TensorFlow altrove che vorresti utilizzare nella tua applicazione web. TensorFlow.js fornisce un convertitore di modelli per 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 sono disponibili qui .

Modulo TensorFlow Hub : si tratta di modelli che sono stati impacchettati 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 chiamato model.h5 nella tua tmp/ . Per convertire il tuo modello utilizzando il convertitore TensorFlow.js, puoi eseguire il comando seguente:

$ 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 tmp/tfjs_model/ .

Maggiori dettagli sugli argomenti della riga di comando corrispondenti a diversi formati di 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. In tal caso, scriviamo il grafico in un formato che può essere utilizzato dal browser. 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 la piegatura di operazioni adiacenti, l'eliminazione dei sottografi comuni, ecc. Queste modifiche non hanno alcun effetto sull'output del modello. Per un'ulteriore ottimizzazione, gli utenti possono passare un argomento che istruisce il convertitore a quantizzare il modello a una certa dimensione di byte. La quantizzazione è una tecnica per ridurre le dimensioni del modello rappresentando pesi con meno bit. Gli utenti devono fare attenzione a garantire che il loro modello mantenga un grado di accuratezza accettabile dopo la quantizzazione.

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

Migliori pratiche

Anche se facciamo ogni sforzo per ottimizzare il tuo modello durante la conversione, spesso il modo migliore per garantire che il tuo modello funzioni bene è costruirlo tenendo conto degli 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 correttamente 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 questi asset 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 ottimizzare 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 ai modelli di treno .

Dopo la conversione, è una buona idea eseguire l'inferenza alcune volte e confrontare la velocità del tuo 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 successive inferenze a causa del sovraccarico della creazione di trame e della compilazione degli shader.