TensorFlow 示例

Vertica 使用 TFIntegration UDX 包与 TensorFlow 集成。您可以在 Vertica 数据库之外训练模型,然后将它们导入 Vertica 并对数据进行预测。

TensorFlow 脚本和数据集包含在 Machine-Learning-Examples/TensorFlow 下的 GitHub 存储库中。

下面的示例创建一个在 MNIST 手写数字分类数据集上训练的 Keras(一种 TensorFlow API)神经网络模型,其各层如下所示。

数据从上到下穿过每一层,每一层在返回分数之前修改输入。在此示例中,传入的数据是一组手写阿拉伯数字图像,输出内容是输入图像为特定数字的概率:

inputs = keras.Input(shape=(28, 28, 1), name="image")
x = layers.Conv2D(32, 5, activation="relu")(inputs)
x = layers.MaxPooling2D(2)(x)
x = layers.Conv2D(64, 5, activation="relu")(x)
x = layers.MaxPooling2D(2)(x)
x = layers.Flatten()(x)
x = layers.Dense(10, activation='softmax', name='OUTPUT')(x)
tfmodel = keras.Model(inputs, x)

有关 TensorFlow 如何与 Vertica 数据库交互以及如何导入更复杂模型的详细信息,请参阅TensorFlow 集成和目录结构

为 Vertica 准备 TensorFlow 模型

以下过程在 Vertica 之外进行。

训练和保存 TensorFlow 模型

  1. 安装 TensorFlow 2

  2. 训练您的模型。对于此特定示例,您可以运行 train_simple_model.py 来训练和保存模型。否则,一般而言,您可以在 Python 中手动训练您的模型,然后保存它

    $ mymodel.save('my_saved_model_dir')
    
  3. 运行 Machine-Learning-Examples 存储库opt/vertica/packages/TFIntegration/examples 中包含的 freeze_tf2_model.py 脚本,指定您的模型和输出目录(可选,默认为 frozen_tfmodel)。

    此脚本将您保存的模型转换为与 Vertica 兼容的冻结图格式并创建 tf_model_desc.json 文件,该文件描述了 Vertica 应如何将其表转换为 TensorFlow 张量:

    $ ./freeze_tf2_model.py path/to/tf/model frozen_model_dir
    

导入 TensorFlow 模型并在 Vertica 中进行预测

  1. 如果您尚未安装 TFIntegration UDX 包,请以 dbadmin 身份在任何节点上安装。您只需执行一次该操作。

    $ /opt/vertica/bin/admintools -t install_package -d database_name -p 'password' --package TFIntegration
    

  2. directory 复制到 Vertica 群集中的任何节点并导入模型:

    => SELECT IMPORT_MODELS('path/to/frozen_model_dir' USING PARAMETERS category='TENSORFLOW');
    
  3. 导入要对其进行预测的数据集。对于此示例:

    1. Machine-Learning-Examples/TensorFlow/data 目录复制到 Vertica 群集中的任何节点。

    2. 从该 data 目录中,运行 SQL 脚本 load_tf_data.sql 以加载 MNIST 数据集:

      $ vsql -f load_tf_data.sql
      
  4. 使用 PREDICT_TENSORFLOW 在数据集上使用您的模型进行预测。在此示例中,该模型用于对 MNIST 数据集中的手写数字图像进行分类:

    => SELECT PREDICT_TENSORFLOW (*
                       USING PARAMETERS model_name='tf_mnist_keras', num_passthru_cols=1)
                       OVER(PARTITION BEST) FROM tf_mnist_test_images;
    
    --example output, the skipped columns are displayed as the first columns of the output
     ID | col0 | col1 | col2 | col3 | col4 | col5 | col6 | col7 | col8 | col9
    ----+------+------+------+------+------+------+------+------+------+------
      1 |    0 |    0 |    1 |    0 |    0 |    0 |    0 |    0 |    0 |    0
      3 |    1 |    0 |    0 |    0 |    0 |    0 |    0 |    0 |    0 |    0
      6 |    0 |    0 |    0 |    0 |    1 |    0 |    0 |    0 |    0 |    0
    ...
    
  5. 要使用 EXPORT_MODELS 导出模型:

    => SELECT EXPORT_MODELS('/path/to/export/to', 'tf_mnist_keras');
     EXPORT_MODELS
    ---------------
     Success
    (1 row)
    

TensorFlow 1(已弃用)

  1. 使用 Python 3.7 或更低版本安装 TensorFlow 1.15

  2. Machine-Learning-Examples/TensorFlow/tf1 中运行 train_save_model.py 以训练模型并将其保存为 TensorFlow 和冻结图格式。

另请参阅