使用导入的 TensorFlow 模型进行预测

在本教程中,将 TensorFlow 模型导入 BigQuery ML 数据集。然后,使用 SQL 查询通过导入的模型进行预测。

创建数据集

创建 BigQuery 数据集以存储机器学习模型。

控制台

  1. 在 Google Cloud 控制台中,前往 BigQuery 页面。

    转到 BigQuery 页面

  2. 探索器窗格中,点击您的项目名称。

  3. 点击 查看操作 > 创建数据集

  4. 创建数据集 页面上,执行以下操作:

    • 数据集 ID 部分,输入 bqml_tutorial

    • 位置类型部分,选择多区域,然后选择 US (multiple regions in United States)(美国[美国的多个区域])。

    • 保持其余默认设置不变,然后点击创建数据集

bq

如需创建新数据集,请使用带有 --location 标志的 bq mk 命令。 如需查看完整的潜在参数列表,请参阅 bq mk --dataset 命令参考文档。

  1. 创建一个名为 bqml_tutorial 的数据集,并将数据位置设置为 US,说明为 BigQuery ML tutorial dataset

    bq --location=US mk -d \
     --description "BigQuery ML tutorial dataset." \
     bqml_tutorial

    该命令使用的不是 --dataset 标志,而是 -d 快捷方式。如果省略 -d--dataset,该命令会默认创建一个数据集。

  2. 确认已创建数据集:

    bq ls

API

使用已定义的数据集资源调用 datasets.insert 方法。

{
  "datasetReference": {
     "datasetId": "bqml_tutorial"
  }
}

BigQuery DataFrame

在尝试此示例之前,请按照《BigQuery 快速入门:使用 BigQuery DataFrames》中的 BigQuery DataFrames 设置说明进行操作。如需了解详情,请参阅 BigQuery DataFrames 参考文档

如需向 BigQuery 进行身份验证,请设置应用默认凭证。如需了解详情,请参阅为本地开发环境设置 ADC

import google.cloud.bigquery

bqclient = google.cloud.bigquery.Client()
bqclient.create_dataset("bqml_tutorial", exists_ok=True)

导入 TensorFlow 模型

以下步骤介绍了如何从 Cloud Storage 导入模型。模型的路径为 gs://cloud-training-demos/txtclass/export/exporter/1549825580/*。导入的模型名称为 imported_tf_model

请注意,Cloud Storage URI 以通配符 (*) 结尾。此字符表示 BigQuery ML 应导入与该模型关联的任何资产。

导入的模型是 TensorFlow 文本分类器模型,可预测哪个网站发布了给定文章标题。

如需将 TensorFlow 模型导入数据集,请按照以下步骤操作。

控制台

  1. 在 Google Cloud 控制台中,前往 BigQuery 页面。

    转到 BigQuery 页面

  2. 对于创建新内容,请点击 SQL 查询

  3. 在查询编辑器中,输入以下 CREATE MODEL 语句,然后点击运行

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

    操作完成后,您应会看到类似 Successfully created model named imported_tf_model 的消息。

  4. 您的新模型会显示在资源面板中。模型由模型图标 模型图标 表示。

  5. 如果您在资源面板中选择该新模型,则模型相关信息将显示在查询编辑器下方。

    TensorFlow 模型信息

bq

  1. 通过输入以下 CREATE MODEL 语句,从 Cloud Storage 导入 TensorFlow 模型。

    bq query --use_legacy_sql=false \
    "CREATE OR REPLACE MODEL
      `bqml_tutorial.imported_tf_model`
    OPTIONS
      (MODEL_TYPE='TENSORFLOW',
        MODEL_PATH='gs://cloud-training-demos/txtclass/export/exporter/1549825580/*')"
  2. 导入模型后,请验证该模型是否显示在数据集中。

    bq ls -m bqml_tutorial

    输出内容类似如下:

    tableId             Type
    ------------------- -------
    imported_tf_model   MODEL

API

插入新作业并在请求正文中填充 jobs#configuration.query 属性。

{
  "query": "CREATE MODEL `PROJECT_ID:bqml_tutorial.imported_tf_model` OPTIONS(MODEL_TYPE='TENSORFLOW' MODEL_PATH='gs://cloud-training-demos/txtclass/export/exporter/1549825580/*')"
}

PROJECT_ID 替换为您的项目和数据集的名称。

BigQuery DataFrame

在尝试此示例之前,请按照《BigQuery 快速入门:使用 BigQuery DataFrames》中的 BigQuery DataFrames 设置说明进行操作。如需了解详情,请参阅 BigQuery DataFrames 参考文档

如需向 BigQuery 进行身份验证,请设置应用默认凭证。如需了解详情,请参阅为本地开发环境设置 ADC

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

如需详细了解如何将 TensorFlow 模型导入 BigQuery ML,包括格式和存储要求,请参阅用于导入 TensorFlow 模型的 CREATE MODEL 语句

使用导入的 TensorFlow 模型进行预测

导入 TensorFlow 模型后,您可以使用 ML.PREDICT 函数通过该模型进行预测。

以下查询使用 imported_tf_model 根据 hacker_news 公共数据集的 full 表中的输入数据进行预测。在该查询中,TensorFlow 模型的 serving_input_fn 函数指定,模型需要单个名为 input 的输入字符串。子查询将别名 input 分配给子查询的 SELECT 语句中的 title 列。

如需使用导入的 TensorFlow 模型进行预测,请按照以下步骤操作。

控制台

  1. 在 Google Cloud 控制台中,前往 BigQuery 页面。

    转到 BigQuery 页面

  2. 新建下,点击 SQL 查询

  3. 在查询编辑器中,输入使用 ML.PREDICT 函数的查询。

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

    查询结果应如下所示:

    查询结果

bq

输入以下命令以运行使用 ML.PREDICT 的查询。

bq query \
--use_legacy_sql=false \
'SELECT *
FROM ML.PREDICT(
  MODEL `bqml_tutorial.imported_tf_model`,
  (SELECT title AS input FROM `bigquery-public-data.hacker_news.full`))'

结果应如下所示:

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

插入新作业并在请求正文中填充 jobs#configuration.query 属性。将 project_id 替换为您的项目名称。

{
  "query": "SELECT * FROM ML.PREDICT(MODEL `project_id.bqml_tutorial.imported_tf_model`, (SELECT * FROM input_data))"
}

BigQuery DataFrame

在尝试此示例之前,请按照《BigQuery 快速入门:使用 BigQuery DataFrames》中的 BigQuery DataFrames 设置说明进行操作。如需了解详情,请参阅 BigQuery DataFrames 参考文档

如需向 BigQuery 进行身份验证,请设置应用默认凭证。如需了解详情,请参阅为本地开发环境设置 ADC

使用 predict 函数运行 TensorFlow 模型:

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)

结果应如下所示:

Result_visualization

在查询结果中,dense_1 列包含概率值数组,input 列包含输入表中的相应字符串值。每个数组元素值代表相应输入字符串是某特定出版物中的文章标题的概率。