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 模型
-
训练您的模型。对于此特定示例,您可以运行 train_simple_model.py 来训练和保存模型。否则,一般而言,您可以在 Python 中手动训练您的模型,然后保存它:
$ mymodel.save('my_saved_model_dir')
-
运行 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 中进行预测
-
如果您尚未安装 TFIntegration UDX 包,请以
dbadmin
身份在任何节点上安装。您只需执行一次该操作。$ /opt/vertica/bin/admintools -t install_package -d database_name -p 'password' --package TFIntegration
-
将
directory
复制到 Vertica 群集中的任何节点并导入模型:=> SELECT IMPORT_MODELS('path/to/frozen_model_dir' USING PARAMETERS category='TENSORFLOW');
-
导入要对其进行预测的数据集。对于此示例:
-
将
Machine-Learning-Examples/TensorFlow/data
目录复制到 Vertica 群集中的任何节点。 -
从该
data
目录中,运行 SQL 脚本load_tf_data.sql
以加载 MNIST 数据集:$ vsql -f load_tf_data.sql
-
-
使用 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 ...
-
要使用 EXPORT_MODELS 导出模型:
=> SELECT EXPORT_MODELS('/path/to/export/to', 'tf_mnist_keras'); EXPORT_MODELS --------------- Success (1 row)
注意
虽然您在从 Vertica 导出 TensorFlow 模型后无法继续训练它,但您可以使用它来预测另一个 Vertica 群集中的数据或 Vertica 外部另一个平台上的数据。TensorFlow 1(已弃用)
-
使用 Python 3.7 或更低版本安装 TensorFlow 1.15。
-
在
Machine-Learning-Examples/TensorFlow/tf1
中运行train_save_model.py
以训练模型并将其保存为 TensorFlow 和冻结图格式。