Haz predicciones con modelos de TensorFlow importados

En esta página, se muestra cómo importar modelos de TensorFlow a un conjunto de datos de BigQuery ML y utilizarlos para realizar predicciones a partir de una consulta de SQL. Puedes importar modelos de TensorFlow con estas interfaces:

  • La consola de Google Cloud
  • El comando bq query en la herramienta de línea de comandos de bq
  • La API de BigQuery

Para obtener más información sobre cómo importar modelos de TensorFlow a BigQuery ML, incluidos los requisitos de formato y almacenamiento, consulta la declaración CREATE MODEL para importar modelos de TensorFlow.

Importa modelos de TensorFlow

Para importar modelos de TensorFlow a un conjunto de datos, sigue estos pasos:

Console

  1. En la consola de Google Cloud, ve a la página de BigQuery.

    Ir a la página de BigQuery

  2. En el editor de consultas, ingresa una declaración CREATE MODEL como la siguiente.

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

    La consulta anterior importa un modelo ubicado en gs://cloud-training-demos/txtclass/export/exporter/1549825580/* como un modelo de BigQuery ML llamado imported_tf_model. El URI de Cloud Storage termina en un carácter comodín (*) para que BigQuery ML también importe los activos asociados con el modelo. El modelo importado es un modelo clasificador de texto de TensorFlow que predice qué sitio web publicó el título de un artículo determinado.

  3. Tu nuevo modelo ahora debería aparecer en el panel Recursos. A medida que expandes cada uno de los conjuntos de datos en un proyecto, se enumeran los modelos junto con los otros recursos de BigQuery en los conjuntos de datos. Los modelos se indican con el ícono del modelo: ícono del modelo.

  4. Si seleccionas el modelo nuevo en el panel Recursos, la información sobre el modelo aparece debajo del Editor de consultas.

    Información del modelo de TensorFlow

bq

Para importar un modelo de TensorFlow desde Cloud Storage, ejecuta una consulta por lotes. Para ello, ingresa un comando como el siguiente:

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

Por ejemplo:

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

Después de importar el modelo, debe aparecer en el resultado de bq ls [dataset_name]:

$ bq ls example_dataset

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

API

Inserta un nuevo trabajo y propaga la propiedad jobs#configuration.query como en el cuerpo de la solicitud siguiente:

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

BigQuery DataFrames

Antes de probar este ejemplo, sigue las instrucciones de configuración de BigQuery DataFrames en la guía de inicio rápido de BigQuery con BigQuery DataFrames. Para obtener más información, consulta la documentación de referencia de BigQuery DataFrames.

Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para un entorno de desarrollo local.

Importa el modelo con el 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/*"
)

Haz predicciones con modelos de TensorFlow importados

Para realizar predicciones con modelos importados de TensorFlow, sigue estos pasos. En los siguientes ejemplos, se da por sentado que importaste el modelo de TensorFlow como lo hiciste en el ejemplo anterior.

Console

  1. En la consola de Google Cloud, ve a la página de BigQuery.

    Ir a la página de BigQuery

  2. En el editor de consultas, ingresa una consulta con ML.PREDICT como la que se muestra a continuación.

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

    La consulta anterior usa el modelo llamado imported_tf_model en el conjunto de datos example_dataset en el proyecto actual para realizar predicciones a partir de datos de entrada en la tabla pública full del conjunto de datos hacker_news en el proyecto bigquery-public-data. En este caso, la función serving_input_fn del modelo de TensorFlow especifica que el modelo espera una sola string de entrada llamada input, por lo que la subconsulta asigna el alias input a la columna en la sentencia SELECT de la subconsulta.

    Esta consulta genera resultados como los siguientes. En este ejemplo, el modelo genera la columna dense_1, que contiene un arreglo de valores de probabilidad, así como una columna input, que contiene los valores de string correspondientes de la tabla de entrada. Cada valor del elemento del arreglo representa la probabilidad de que la string de entrada correspondiente sea el título de un artículo de una publicación en particular.

    Resultados de la consulta

bq

Para realizar predicciones a partir de datos de entrada en la tabla input_data, ingresa un comando como el siguiente con el modelo de TensorFlow importado my_model:

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

Por ejemplo:

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

Este ejemplo muestra resultados como el siguiente:

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

Inserta un nuevo trabajo y propaga la propiedad jobs#configuration.query como en el cuerpo de la solicitud siguiente:

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

BigQuery DataFrames

Antes de probar este ejemplo, sigue las instrucciones de configuración de BigQuery DataFrames en la guía de inicio rápido de BigQuery con BigQuery DataFrames. Para obtener más información, consulta la documentación de referencia de BigQuery DataFrames.

Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para un entorno de desarrollo local.

Usa la función predict para ejecutar el 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)

El resultado es similar al siguiente:Result_visualization

¿Qué sigue?