Como fazer predições com modelos importados do TensorFlow

Visão geral

Nesta página, mostramos como importar modelos do TensorFlow em um conjunto de dados do BigQuery ML e usá-los para fazer predições com base em uma consulta do SQL. Importe modelos do TensorFlow usando estas interfaces:

Para mais informações sobre como importar modelos do TensorFlow no BigQuery ML, incluindo requisitos de formato e armazenamento, consulte a instrução CREATE MODEL para importar modelos do TensorFlow.

Como importar modelos do TensorFlow

Para importar modelos do TensorFlow em um conjunto de dados, siga estas etapas:

Console

  1. Acesse a IU da Web do BigQuery no Console do Cloud.

    Acessar a IU da Web do BigQuery

  2. No editor de consultas, insira uma instrução CREATE MODEL como a seguinte.

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

    A consulta acima importa um modelo localizado em gs://cloud-training-demos/txtclass/export/exporter/1549825580/* como um modelo de ML do BigQuery chamado imported_tf_model. O URI do Cloud Storage termina em um caractere curinga (*) para que o BigQuery ML também importe quaisquer recursos associados ao modelo. O modelo importado é um modelo de classificador de texto do TensorFlow que prevê qual site publicou um determinado título de artigo.

  3. Agora, seu novo modelo aparecerá no painel Recursos. À medida que você expande cada um dos conjuntos de dados em um projeto, os modelos são listados junto a outros recursos do BigQuery nos conjuntos de dados. Os modelos são indicados pelo ícone do modelo: ícone do modelo.

  4. Se você selecionar o novo modelo no painel Recursos, as informações sobre o modelo aparecerão abaixo do Editor de consultas.

    Informações do modelo do TensorFlow

CLI

Insira um comando como o seguinte para executar uma consulta em lote que importe um modelo do TensorFlow a partir do Cloud Storage:

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

Por exemplo:

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

Depois de importar o modelo, ele deve aparecer na saída de bq ls [dataset_name]:

$ bq ls example_dataset

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

API

Insira um novo job e preencha a propriedade jobs#configuration.query como no corpo da solicitação a seguir:

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

Como fazer predições com modelos importados do TensorFlow

Para fazer predições com modelos importados do TensorFlow, siga as etapas abaixo. Nos exemplos, supõe-se que você importou o modelo do TensorFlow como no exemplo acima.

Console

  1. Acesse a IU da Web do BigQuery no Console do Cloud.

    Acessar a IU da Web do BigQuery

  2. No Editor de consultas, insira uma consulta usando ML.PREDICT da seguinte maneira.

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

    A consulta acima usa o modelo chamado imported_tf_model no conjunto de dados example_dataset no projeto atual para fazer previsões a partir de dados de entrada na tabela pública stories do conjunto de dados hacker_news no projeto bigquery-public-data. Neste caso, a função serving_input_fn do modelo do TensorFlow especifica que o modelo espera uma única string de entrada denominada "input", portanto, a subconsulta atribui o alias input à coluna na instrução SELECT da subconsulta.

    Esta consulta gera resultados como a seguir. Neste exemplo, o modelo gera a coluna dense_1, que contém uma matriz de valores de probabilidade, bem como uma coluna input, que contém os valores de string correspondentes da tabela de entrada. Cada valor de elemento da matriz representa a probabilidade de que a string de entrada correspondente seja um título de artigo de uma publicação específica.

    Resultados da consulta

CLI

Insira um comando como o seguinte para fazer previsões a partir de dados de entrada na tabela input_data usando o modelo importado do TensorFlow my_model:

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

Por exemplo:

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

Neste exemplo, recebemos resultados como os seguintes:

+----------------------------------------------------------------------+------------------------------------------------------------------------------------+
|                               dense_1                                |                                       input                                        |
+----------------------------------------------------------------------+------------------------------------------------------------------------------------+
|   ["0.8611106276512146","0.06648492068052292","0.07240450382232666"] | Appshare                                                                           |
|    ["0.6251608729362488","0.2989124357700348","0.07592673599720001"] | A Handfull of Gold.                                                                |
|   ["0.014276246540248394","0.972910463809967","0.01281337533146143"] | Fastest Growing Skin Care Supplement for Increased Hair, Skin and Nail Nourishment |
| ["0.9821603298187256","1.8601855117594823E-5","0.01782100833952427"] | R4 3ds sdhc                                                                        |
|   ["0.8611106276512146","0.06648492068052292","0.07240450382232666"] | Empréstimo Com Nome Sujo                                                           |
+----------------------------------------------------------------------+------------------------------------------------------------------------------------+

API

Insira um novo job e preencha a propriedade jobs#configuration.query como no corpo da solicitação a seguir:

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

A seguir