Diese Seite wurde von der Cloud Translation API übersetzt.
Switch to English

Modelle speichern und laden

TensorFlow.js bietet Funktionen zum Speichern und Laden von Modellen, die mit der Layers API erstellt oder aus vorhandenen TensorFlow-Modellen konvertiert wurden. Dies können Modelle sein, die Sie selbst oder von anderen trainiert haben. Ein wesentlicher Vorteil der Verwendung der Ebenen-API besteht darin, dass die damit erstellten Modelle serialisierbar sind. Dies wird in diesem Lernprogramm erläutert.

Dieses Tutorial konzentriert sich auf das Speichern und Laden von TensorFlow.js-Modellen (erkennbar an JSON-Dateien). Wir können auch TensorFlow Python-Modelle importieren. Das Laden dieser Modelle wird in den folgenden zwei Tutorials behandelt:

Speichern Sie ein tf.Model

tf.Model und tf.Sequential bieten beide eine Funktion model.save , mit der Sie die Topologie und Gewichte eines Modells speichern können.

  • Topologie: Dies ist eine Datei, die die Architektur eines Modells beschreibt (dh welche Operationen es verwendet). Es enthält Verweise auf die Gewichte der Modelle, die extern gespeichert werden.

  • Gewichte: Dies sind Binärdateien, in denen die Gewichte eines bestimmten Modells in einem effizienten Format gespeichert werden. Sie werden im Allgemeinen im selben Ordner wie die Topologie gespeichert.

Schauen wir uns an, wie der Code zum Speichern eines Modells aussieht

 const saveResult = await model.save('localstorage://my-model-1');
 

Ein paar Dinge zu beachten:

  • Die save verwendet ein URL-ähnliches Zeichenfolgenargument, das mit einem Schema beginnt. Dies beschreibt die Art des Ziels, unter dem wir ein Modell speichern möchten. Im obigen Beispiel lautet das Schema localstorage://
  • Dem Schema folgt ein Pfad . Im obigen Beispiel ist der Pfad my-model-1 .
  • Die save ist asynchron.
  • Der Rückgabewert von model.save ist ein JSON-Objekt, das Informationen wie die model.save der Topologie und der Gewichte des Modells enthält.
  • Die zum Speichern des Modells verwendete Umgebung hat keinen Einfluss darauf, welche Umgebungen das Modell laden können. Das Speichern eines Modells in node.js verhindert nicht, dass es in den Browser geladen wird.

Im Folgenden werden wir die verschiedenen verfügbaren Schemata untersuchen.

Lokaler Speicher (nur Browser)

Schema: localstorage://

 await model.save('localstorage://my-model');
 

Dadurch wird ein Modell unter dem Namen my-model im lokalen Speicher des Browsers gespeichert . Dies bleibt zwischen den Aktualisierungen bestehen, obwohl der lokale Speicher von Benutzern oder dem Browser selbst gelöscht werden kann, wenn Speicherplatz ein Problem darstellt. Jeder Browser legt außerdem ein eigenes Limit fest, wie viele Daten für eine bestimmte Domain im lokalen Speicher gespeichert werden können.

IndexedDB (nur Browser)

Schema: indexeddb://

 await model.save('indexeddb://my-model');
 

Dadurch wird ein Modell im IndexedDB- Speicher des Browsers gespeichert . Wie der lokale Speicher bleibt er zwischen den Aktualisierungen bestehen, und die Größe der gespeicherten Objekte ist tendenziell stärker begrenzt.

Dateidownloads (nur Browser)

Schema: downloads://

 await model.save('downloads://my-model');
 

Dadurch lädt der Browser die Modelldateien auf den Computer des Benutzers herunter. Es werden zwei Dateien erstellt:

  1. Eine JSON-Textdatei mit dem Namen [my-model].json , die die Topologie und den Verweis auf die unten beschriebene Gewichtungsdatei enthält.
    1. Eine Binärdatei mit den Gewichtswerten [my-model].weights.bin .

Sie können den Namen [my-model] ändern, um Dateien mit einem anderen Namen zu erhalten.

Da die .json Datei unter Verwendung eines relativen Pfads auf die .bin verweist, sollten sich die beiden Dateien im selben Ordner befinden.

HTTP (S) -Anforderung

Schema: http:// oder https://

 await model.save('http://model-server.domain/upload')
 

Dadurch wird eine Webanforderung zum Speichern eines Modells auf einem Remote-Server erstellt. Sie sollten die Kontrolle über diesen Remote-Server haben, damit Sie sicherstellen können, dass er die Anforderung verarbeiten kann.

Das Modell wird über eine POST- Anforderung an den angegebenen HTTP-Server gesendet. Der Hauptteil des POST liegt im multipart/form-data und besteht aus zwei Dateien

  1. Eine JSON-Textdatei mit dem Namen model.json , die die Topologie und den Verweis auf die unten beschriebene Gewichtungsdatei enthält.
    1. Eine Binärdatei mit den Gewichtswerten model.weights.bin .

Beachten Sie, dass der Name der beiden Dateien immer genau wie oben angegeben ist (der Name ist in die Funktion integriert). Dieses API-Dokument enthält ein Python-Code-Snippet, das zeigt, wie das Flask- Webframework verwendet werden kann, um die vom save stammende Anforderung zu verarbeiten.

Oft müssen Sie mehr Argumente übergeben oder Header an Ihren HTTP-Server anfordern (z. B. zur Authentifizierung oder wenn Sie einen Ordner angeben möchten, in dem das Modell gespeichert werden soll). Durch save des URL-Zeichenfolgenarguments in tf.io.browserHTTPRequest können Sie diese Aspekte der Anforderungen durch save tf.io.browserHTTPRequest . Diese API bietet eine größere Flexibilität bei der Steuerung von HTTP-Anforderungen.

Beispielsweise:

 await model.save(tf.io.browserHTTPRequest(
    'http://model-server.domain/upload',
    {method: 'PUT', headers: {'header_key_1': 'header_value_1'} }));
 

Natives Dateisystem (nur Node.js)

Schema: file://

 await model.save('file:///path/to/my-model');
 

Wenn wir auf Node.js laufen, haben wir auch direkten Zugriff auf das Dateisystem und können dort Modelle speichern. Mit dem obigen Befehl werden zwei Dateien unter dem nach dem scheme angegebenen path gespeichert.

  1. Eine JSON-Textdatei mit dem Namen [model].json , die die Topologie und den Verweis auf die unten beschriebene Gewichtungsdatei enthält.
    1. Eine Binärdatei mit den Gewichtswerten [model].weights.bin .

Beachten Sie, dass der Name der beiden Dateien immer genau wie oben angegeben ist (der Name ist in die Funktion integriert).

Laden eines tf.Model

Wenn ein Modell mit einer der oben genannten Methoden gespeichert wurde, können wir es mit der API tf.loadLayersModel .

Schauen wir uns an, wie der Code zum Laden eines Modells aussieht

 const model = await tf.loadLayersModel('localstorage://my-model-1');
 

Ein paar Dinge zu beachten:

  • Wie model.save() die Funktion loadLayersModel ein URL-ähnliches Zeichenfolgenargument, das mit einem Schema beginnt. Dies beschreibt die Art des Ziels, von dem wir ein Modell laden möchten.
  • Dem Schema folgt ein Pfad . Im obigen Beispiel ist der Pfad my-model-1 .
  • Die URL-ähnliche Zeichenfolge kann durch ein Objekt ersetzt werden, das der IOHandler-Schnittstelle entspricht.
  • Die Funktion tf.loadLayersModel() ist asynchron.
  • Der Rückgabewert von tf.loadLayersModel ist tf.Model

Im Folgenden werden wir die verschiedenen verfügbaren Schemata untersuchen.

Lokaler Speicher (nur Browser)

Schema: localstorage://

 const model = await tf.loadLayersModel('localstorage://my-model');
 

Dadurch wird ein Modell mit dem Namen my-model aus dem lokalen Speicher des Browsers geladen .

IndexedDB (nur Browser)

Schema: indexeddb://

 const model = await tf.loadLayersModel('indexeddb://my-model');
 

Dadurch wird ein Modell aus dem IndexedDB- Speicher des Browsers geladen .

HTTP (S)

Schema: http:// oder https://

 const model = await tf.loadLayersModel('http://model-server.domain/download/model.json');
 

Dadurch wird ein Modell von einem http-Endpunkt geladen. Nach dem Laden der json Datei fordert die Funktion entsprechende .bin Dateien an, auf die die json Datei verweist.

Natives Dateisystem (nur Node.js)

Schema: file://

 const model = await tf.loadLayersModel('file://path/to/my-model/model.json');
 

Wenn wir auf Node.js laufen, haben wir auch direkten Zugriff auf das Dateisystem und können Modelle von dort laden. Beachten Sie, dass wir im obigen Funktionsaufruf auf die Datei model.json selbst verweisen (während wir beim Speichern einen Ordner angeben). Die entsprechenden .bin Dateien sollten sich im selben Ordner wie die json Datei befinden.

Laden von Modellen mit IOHandlern

Wenn die oben genannten Schemata für Ihre Anforderungen nicht ausreichen, können Sie mit einem IOHandler ein benutzerdefiniertes Ladeverhalten IOHandler . Ein IOHandler , den TensorFlow.js bereitstellt, ist tf.io.browserFiles dem tf.io.browserFiles Modelldateien in den Browser hochladen können. Weitere Informationen finden Sie in der Dokumentation .

Speichern und Laden von Modellen mit benutzerdefinierten IOHandlern

Wenn die oben genannten Schemata für Ihre Lade- oder Speicheranforderungen nicht ausreichen, können Sie ein benutzerdefiniertes Serialisierungsverhalten implementieren, indem Sie einen IOHandler implementieren.

Ein IOHandler ist ein Objekt mit einer save and load Methode.

Die save verwendet einen Parameter, der mit der ModelArtifacts- Schnittstelle übereinstimmt , und sollte ein Versprechen zurückgeben, das in ein SaveResult- Objekt aufgelöst wird.

Die load - Funktion nimmt keinen Parameter und soll ein Versprechen zurückgeben , dass Entschlüsse zu einem ModelArtifacts Objekt. Dies ist das gleiche Objekt, das zum save .

Unter BrowserHTTPRequest finden Sie ein Beispiel für die Implementierung eines IOHandlers.