Realiza predicciones con modelos importados de TensorFlow

Organiza tus páginas con colecciones Guarda y categoriza el contenido según tus preferencias.

Descripción general

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

Realiza predicciones con modelos importados de TensorFlow

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

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

Este ejemplo muestra resultados como el siguiente:

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

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

¿Qué sigue?