Fare previsioni con modelli TensorFlow importati

Panoramica

Questa pagina mostra come importare i modelli TensorFlow in un set di dati BigQuery ML e utilizzarli per effettuare previsioni da una query SQL. Puoi importare i modelli TensorFlow utilizzando queste interfacce:

  • Nella console Google Cloud
  • Il comando bq query nello strumento a riga di comando bq
  • L'API BigQuery

Per ulteriori informazioni sull'importazione dei modelli TensorFlow in BigQuery ML, inclusi i requisiti di formato e archiviazione, consulta L'istruzione CREATE MODEL per l'importazione dei modelli TensorFlow.

Importa modelli TensorFlow

Per importare i modelli TensorFlow in un set di dati:

Console

  1. Nella console Google Cloud, vai alla pagina BigQuery.

    Vai alla pagina BigQuery

  2. Nell'editor query, inserisci un'istruzione CREATE MODEL come la seguente.

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

    La query precedente importa un modello situato in gs://cloud-training-demos/txtclass/export/exporter/1549825580/* come modello BigQuery ML denominato imported_tf_model. L'URI di Cloud Storage termina con un carattere jolly (*), in modo che BigQuery ML importi anche tutti gli asset associati al modello. Il modello importato è un modello classificatore di testo TensorFlow che prevede quale sito web ha pubblicato un determinato titolo di articolo.

  3. Il nuovo modello dovrebbe apparire nel riquadro Risorse. Man mano che espandi ciascuno dei set di dati in un progetto, i modelli vengono elencati insieme alle altre risorse BigQuery nei set di dati. I modelli sono indicati dall'icona del modello: icona del modello .

  4. Se selezioni il nuovo modello nel riquadro Risorse, le informazioni sul modello vengono visualizzate sotto l'Editor query.

    Informazioni sul modello TensorFlow

bq

Per importare un modello TensorFlow da Cloud Storage, esegui una query batch inserendo un comando come questo:

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

Ad esempio:

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/*')"

Dopo aver importato il modello, questo dovrebbe apparire nell'output di bq ls [dataset_name]:

$ bq ls example_dataset

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

API

Inserisci un nuovo job e compila la proprietà jobs#configuration.query come nel seguente corpo della richiesta:

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

Fare previsioni con modelli TensorFlow importati

Per effettuare previsioni con i modelli TensorFlow importati, segui questi passaggi. I seguenti esempi presuppongono che tu abbia importato il modello TensorFlow come nell'esempio precedente.

Console

  1. Nella console Google Cloud, vai alla pagina BigQuery.

    Vai alla pagina BigQuery

  2. Nell'Editor query, inserisci una query utilizzando ML.PREDICT come indicato di seguito.

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

    La query precedente utilizza il modello denominato imported_tf_model nel set di dati example_dataset del progetto attuale per fare previsioni in base ai dati di input nella tabella pubblica full dal set di dati hacker_news nel progetto bigquery-public-data. In questo caso, la funzione serving_input_fn del modello TensorFlow specifica che il modello prevede una singola stringa di input denominata input, quindi la sottoquery assegna l'alias input alla colonna nell'istruzione SELECT della sottoquery.

    Questa query restituisce risultati simili ai seguenti. In questo esempio, il modello restituisce la colonna dense_1, che contiene un array di valori di probabilità, nonché una colonna input, che contiene i valori stringa corrispondenti della tabella di input. Il valore di ogni elemento array rappresenta la probabilità che la stringa di input corrispondente sia il titolo di un articolo di una determinata pubblicazione.

    Risultati delle query

bq

Per effettuare previsioni dai dati di input nella tabella input_data, inserisci un comando come il seguente, utilizzando il modello TensorFlow importato my_model:

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

Ad esempio:

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`))'

Questo esempio restituisce risultati simili ai seguenti:

    +------------------------------------------------------------------------+----------------------------------------------------------------------------------+
    |                               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

Inserisci un nuovo job e compila la proprietà jobs#configuration.query come nel seguente corpo della richiesta:

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

Passaggi successivi