Conversione del modello

TensorFlow.js viene fornito con una varietà di modelli pre-addestrati che sono pronti per l'uso nel browser - si possono trovare nei nostri modelli di pronti contro termine . Tuttavia, potresti aver trovato o creato altrove un modello TensorFlow che desideri utilizzare nella tua applicazione web. TensorFlow.js fornisce un modello di convertitore 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 di default in cui vengono salvati i modelli tensorflow. Il formato SavedModel è documentato qui .

Il modello Keras: modelli Keras vengono memorizzati come file HDF5. Maggiori informazioni sul salvataggio di modelli Keras può essere trovato qui .

Modulo tensorflow Hub: Si tratta di modelli che sono stati impacchettati per la distribuzione su tensorflow Hub, una piattaforma per condividere e scoprire i modelli. La biblioteca modello può essere trovato qui .

A seconda del tipo di modello che stai cercando di convertire, dovrai passare argomenti diversi al convertitore. Per esempio, diciamo che si è salvato un modello di nome Keras model.h5 al tuo tmp/ directory. 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 permette di convertire il modello a /tmp/model.h5 e l'uscita di un model.json di file insieme ai file binari di peso al vostro tmp/tfjs_model/ directory.

Maggiori dettagli circa gli argomenti della riga di comando corrispondenti a diversi formati del modello possono essere trovati ai TensorFlow.js convertitore README .

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ò consumare. 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. Abbiamo anche tentativo di semplificare il modello grafico stesso utilizzando l'open source Grappler progetto. Le semplificazioni del grafico includono l'accostamento di operazioni adiacenti, l'eliminazione di sottografi comuni, ecc. Queste modifiche non hanno effetto sull'output del modello. Per un'ulteriore ottimizzazione, gli utenti possono passare un argomento che indica al convertitore di quantizzare il modello a una determinata dimensione di 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 di accuratezza accettabile dopo la quantizzazione.

Se incontriamo un'operazione non supportata durante la conversione, il processo fallisce e stampiamo il nome dell'operazione per l'utente. Sentitevi liberi di inviare un argomento sul nostro GitHub per farci sapere a questo proposito - cerchiamo di 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 correttamente è 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 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 è possibile 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 un modello Keras convertito:

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

Il tf.loadGraphModel API restituisce un tf.FrozenModel , il che significa che sono fissati i parametri e non sarà in grado di mettere a punto il modello con i nuovi dati. Il tf.loadLayersModel API restituisce un tf.Model, che può essere addestrato. Per informazioni su come addestrare un tf.Model, consultare la guida di modelli di treni .

Dopo la conversione, è una buona idea eseguire l'inferenza alcune volte e confrontare la velocità del modello. Abbiamo una pagina di benchmarking autonoma che può essere utilizzato per questo scopo: https://tensorflow.github.io/tfjs/e2e/benchmarks/local-benchmark/index.html Si può notare che scartiamo 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.