Fazer previsões com os modelos importados do TensorFlow

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:

  • Console do Google Cloud
  • O comando bq query na ferramenta de linha de comando bq
  • API BigQuery

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.

Importar modelos do TensorFlow

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

Console

  1. No console do Google Cloud, acesse a página do BigQuery.

    Acesse a página 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 anterior 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 serão exibidas abaixo do Editor de consultas.

    Informações do modelo do TensorFlow

bq

Para importar um modelo do TensorFlow do Cloud Storage, execute uma consulta em lote inserindo um comando como este:

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

BigQuery DataFrames

Antes de testar esta amostra, siga as instruções de configuração dos BigQuery DataFrames no Guia de início rápido do BigQuery: como usar os BigQuery DataFrames. Para mais informações, consulte a documentação de referência do BigQuery DataFrames.

Para autenticar no BigQuery, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.

Importe o modelo usando o objeto TensorFlowModel.

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

Fazer previsões com os modelos importados do TensorFlow

Para fazer predições com modelos importados do TensorFlow, siga estas etapas. Nos exemplos a seguir, supomos que você importou o modelo do TensorFlow como fez no exemplo anterior.

Console

  1. No console do Google Cloud, acesse a página do BigQuery.

    Acesse a página do BigQuery

  2. No Editor de consultas, insira uma consulta usando ML.PREDICT (em inglês) da seguinte maneira.

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

    A consulta anterior usa o modelo chamado imported_tf_model no conjunto de dados example_dataset no projeto atual para fazer predições de dados de entrada na tabela pública full do conjunto de dados hacker_news no projeto bigquery-public-data. . Nesse caso, a função serving_input_fn do modelo do TensorFlow especifica que o modelo espera uma única string de entrada denominada input, de modo que a subconsulta atribui o alias input à coluna em a 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

bq

Para fazer previsões a partir de dados de entrada na tabela input_data, insira um comando como este a seguir, usando o modelo importado my_model do TensorFlow:

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

Neste exemplo, recebemos resultados como os seguintes:

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

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))"
}

BigQuery DataFrames

Antes de testar esta amostra, siga as instruções de configuração dos BigQuery DataFrames no Guia de início rápido do BigQuery: como usar os BigQuery DataFrames. Para mais informações, consulte a documentação de referência do BigQuery DataFrames.

Para autenticar no BigQuery, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.

Use a função predict para executar o modelo remoto:

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)

O resultado será semelhante ao seguinte: Result_visualization

A seguir