Vorhersagen mit importierten TensorFlow-Modellen erstellen

Überblick

Auf dieser Seite erfahren Sie, wie Sie TensorFlow-Modelle in ein BigQuery ML-Dataset importieren und damit Vorhersagen mithilfe einer SQL-Abfrage treffen. Sie können TensorFlow-Modelle mit diesen Oberflächen importieren:

  • Die Google Cloud Console
  • Der Befehl bq query im bq-Befehlszeilentool
  • BigQuery API

Weitere Informationen zum Importieren von TensorFlow-Modellen in BigQuery ML, einschließlich Format- und Speicheranforderungen, finden Sie unter Anweisung CREATE MODEL zum Importieren von TensorFlow-Modellen.

TensorFlow-Modelle importieren

So importieren Sie TensorFlow-Modelle in ein Dataset:

Console

  1. Öffnen Sie in der Google Cloud Console die Seite „BigQuery“.

    Zur Seite "BigQuery"

  2. Geben Sie im Abfrageeditor die Anweisung CREATE MODEL etwa so ein:

     CREATE OR REPLACE MODEL `example_dataset.imported_tf_model`
      OPTIONS (MODEL_TYPE='TENSORFLOW',
       MODEL_PATH='gs://cloud-training-demos/txtclass/export/exporter/1549825580/*')
    

    Mit der vorherigen Abfrage wird ein Modell aus gs://cloud-training-demos/txtclass/export/exporter/1549825580/* als BigQuery ML-Modell mit dem Namen imported_tf_model importiert. Der Cloud Storage-URI endet mit einem Platzhalterzeichen (*), sodass BigQuery ML auch alle mit dem Modell verknüpften Elemente importiert. Das importierte Modell ist ein TensorFlow-Textklassifizierungsmodell, das vorhersagt, auf welcher Website ein bestimmter Artikeltitel veröffentlicht wurde.

  3. Ihr neues Modell sollte jetzt im Feld Ressourcen angezeigt werden. Wenn Sie die einzelnen Datasets in einem Projekt maximieren, werden die Modelle zusammen mit den anderen BigQuery-Ressourcen in den Datasets aufgelistet. Modelle sind am Modellsymbol Modellsymbol zu erkennen.

  4. Wenn Sie das neue Modell im Feld Ressourcen auswählen, werden Informationen zum Modell unter dem Abfrageeditor angezeigt.

    TensorFlow-Modellinfo

bq

Führen Sie zum Importieren eines TensorFlow-Modells aus Cloud Storage eine Batchabfrage aus. Dazu nutzen Sie einen Befehl wie den folgenden:

bq query \
--use_legacy_sql=false \
"CREATE MODEL
  `mydataset.mymodel`
OPTIONS
  (MODEL_TYPE='TENSORFLOW',
   MODEL_PATH='gs://bucket/path/to/saved_model/*')"

Beispiel:

bq query --use_legacy_sql=false \
"CREATE OR REPLACE MODEL
  `example_dataset.imported_tf_model`
OPTIONS
  (MODEL_TYPE='TENSORFLOW',
    MODEL_PATH='gs://cloud-training-demos/txtclass/export/exporter/1549825580/*')"

Nach dem Import sollte das Modell in der Ausgabe von bq ls [dataset_name] angezeigt werden:

$ bq ls example_dataset

       tableId        Type    Labels   Time Partitioning
 ------------------- ------- -------- -------------------
  imported_tf_model   MODEL

API

Fügen Sie einen neuen Job ein und geben Sie das Attribut jobs#configuration.query wie in diesem Anfragetext an:

{
  "query": "CREATE MODEL `project_id:mydataset.mymodel` OPTIONS(MODEL_TYPE='TENSORFLOW' MODEL_PATH='gs://bucket/path/to/saved_model/*')"
}

BigQuery DataFrames

Bevor Sie dieses Beispiel ausprobieren, folgen Sie den Schritten zur Einrichtung von BigQuery DataFrames in der BigQuery-Kurzanleitung: BigQuery DataFrames verwenden. Weitere Informationen finden Sie in der Referenzdokumentation zu BigQuery DataFrames.

Richten Sie zur Authentifizierung bei BigQuery die Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.

Importieren Sie das Modell mit dem TensorFlowModel-Objekt.

import bigframes
from bigframes.ml.imported import TensorFlowModel

bigframes.options.bigquery.project = PROJECT_ID
# You can change the location to one of the valid locations: https://cloud.google.com/bigquery/docs/locations#supported_locations
bigframes.options.bigquery.location = "US"

imported_tensorflow_model = TensorFlowModel(
    model_path="gs://cloud-training-demos/txtclass/export/exporter/1549825580/*"
)

Vorhersagen mit importierten TensorFlow-Modellen erstellen

Führen Sie folgende Schritte aus, um Vorhersagen mit importierten TensorFlow-Modellen zu treffen. In folgenden Beispielen wird davon ausgegangen, dass Sie das TensorFlow-Modell wie im vorherigen Beispiel importiert haben.

Console

  1. Öffnen Sie in der Google Cloud Console die Seite „BigQuery“.

    Zur Seite "BigQuery"

  2. Geben Sie im Abfrageeditor mit ML.PREDICT eine Abfrage wie folgende ein.

     SELECT *
       FROM ML.PREDICT(MODEL example_dataset.imported_tf_model,
         (
          SELECT title AS input
          FROM bigquery-public-data.hacker_news.full
         )
     )
     

    Die vorherige Abfrage nutzt das Modell namens imported_tf_model im Dataset example_dataset im aktuellen Projekt, um Vorhersagen auf Basis der Eingabedaten in der öffentlichen Tabelle full des Datasets hacker_news im Projekt bigquery-public-data zu treffen. In diesem Fall gibt die Funktion serving_input_fn des TensorFlow-Modells an, dass das Modell einen einzelnen Eingabestring mit dem Namen input erwartet. Entsprechend weist die Unterabfrage der Spalte in der Anweisung SELECT der Unterabfrage den Alias input zu.

    Diese Abfrage gibt Ergebnisse wie unten gezeigt aus. In diesem Beispiel gibt das Modell die Spalte dense_1 aus, die ein Array von Wahrscheinlichkeitswerten enthält, sowie eine Spalte input, die die entsprechenden Stringwerte aus der Eingabetabelle enthält. Jeder Elementwert des Arrays stellt die Wahrscheinlichkeit dar, dass der entsprechende Eingabestring ein Artikeltitel aus einer bestimmten Publikation ist.

    Abfrageergebnisse

bq

Geben Sie einen Befehl wie den folgenden unter Nutzung des importierten TensorFlow-Modells my_model ein, um Vorhersagen aus Eingabedaten der Tabelle input_data zu treffen:

bq query \
--use_legacy_sql=false \
'SELECT *
 FROM ML.PREDICT(
   MODEL `my_project.my_dataset.my_model`,
   (SELECT * FROM input_data))'

Beispiel:

bq query \
--use_legacy_sql=false \
'SELECT *
FROM ML.PREDICT(
  MODEL `tensorflow_sample.imported_tf_model`,
  (SELECT title AS input FROM `bigquery-public-data.hacker_news.full`))'

Dieses Beispiel gibt folgende Ergebnisse zurück:

    +------------------------------------------------------------------------+----------------------------------------------------------------------------------+
    |                               dense_1                                  |                                       input                                      |
    +------------------------------------------------------------------------+----------------------------------------------------------------------------------+
    |   ["0.6251608729362488","0.2989124357700348","0.07592673599720001"]    | How Red Hat Decides Which Open Source Companies t...                             |
    |   ["0.014276246540248394","0.972910463809967","0.01281337533146143"]   | Ask HN: Toronto/GTA mastermind around side income for big corp. dev?             |
    |   ["0.9821603298187256","1.8601855117594823E-5","0.01782100833952427"] | Ask HN: What are good resources on strategy and decision making for your career? |
    |   ["0.8611106276512146","0.06648492068052292","0.07240450382232666"]   | Forget about promises, use harvests                                              |
    +------------------------------------------------------------------------+----------------------------------------------------------------------------------+

API

Fügen Sie einen neuen Job ein und geben Sie das Attribut jobs#configuration.query wie in diesem Anfragetext an:

{
  "query": "SELECT * FROM ML.PREDICT(MODEL `my_project.my_dataset.my_model`, (SELECT * FROM input_data))"
}

BigQuery DataFrames

Bevor Sie dieses Beispiel ausprobieren, folgen Sie den Schritten zur Einrichtung von BigQuery DataFrames in der BigQuery-Kurzanleitung: BigQuery DataFrames verwenden. Weitere Informationen finden Sie in der Referenzdokumentation zu BigQuery DataFrames.

Richten Sie zur Authentifizierung bei BigQuery die Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.

Verwenden Sie die Funktion predict, um das Remote-Modell auszuführen:

import bigframes.pandas as bpd

df = bpd.read_gbq("bigquery-public-data.hacker_news.full")
df_pred = df.rename(columns={"title": "input"})
predictions = imported_tensorflow_model.predict(df_pred)
predictions.head(5)

Das Ergebnis sieht etwa so aus: Screenshot: Ergebnisvisualisierung

Nächste Schritte