跳到主要内容

构建Tensorflow开发的模型

构建: 可将您已打包的模型进行容器化处理,方便您的模型资产迁移和部署。

根据您使用的框架,AILines将针对不同的框架进行构建。
Tensorflow 框架为例,我们首先通过 Notebook 创建一个模型

提示

关于如何启动Notebook,请参看:创建Notebook

定义模型网络,如下图: 开发一个Tensorflow模型-create

模型评估后使用 Tensorflow 原生 save 方式进行打包:

FilePath = './saved_model/tf_model'
tf.saved_model.save(model, f'{FilePath}')

开发一个Tensforflow模型-define

提示

如果您使用的是 自定义模型网络,请将网络定义文件也一并保存在 FilePath同级目录

开发一个Tensforflow模型-define

创建构建

提交构建

其中:

  • 工作空间: 模型所在的工作空间。
  • Framework: 模型所使用的框架。
  • 模型存储路径: 模型打包文件存储路径, 上例模型存储路径为 saved_model/tf_mnist/
  • 服务名版本: 将模型打包为服务,该模型的服务名称与版本号,服务名及版本号在租户内唯一。
  • 输入输出: 模型数输入和输出名称和类型,目前, 输入参数可选择 Base64ImageNumpyNdarray 两种类型,输出结果类型仅可以为NumpyNdarray
  • 输入前置处理函数: 如果模型的输入需要根据自身业务进行一定的处理,则请将处理内容加入到函数中。如果您不提供相应的处理,系统将提供默认行为。
提示

请注意:由于 Tensorflow 模型输出可能是一系列文件,所以对于 模型存储路径 请一定输入模型目录的完整路径并且以'/'为结尾,并保证该路径下没有其他干扰文件

提示

请注意:由于当前mnist手写体识别例子中模型使用图片作为输入,构建中请选择输入类型为 Base64Image
当输入类型为 Base64Image 时,输入前置处理函数 内容将自动加入处理代码。

构建提交

确认提交构建后, 将跳转到构建列表页 确认构建

提交构建后,AILines将在后台将模型打包成服务, 一般需要等待5~10分钟,如果模型的复杂度高并且 Python 依赖多则等待时间会有所延长。 等待构建

查看进度

提示

关于如何部署,请参看:模型部署

查看日志

构建日志

Tensorflow参考代码

网络定义
import tensorflow as tf
from tensorflow.keras.layers import Dense, Flatten, Conv2D
from tensorflow.keras import Model

class LeNetModel(Model):
def __init__(self):
super(LeNetModel, self).__init__()
self.conv1 = Conv2D(32, 3, activation="relu")
self.flatten = Flatten()
self.d1 = Dense(128, activation="relu")
self.d2 = Dense(10)

@tf.function(input_signature=[tf.TensorSpec([None, 28, 28, 1], tf.float32)])
def call(self, x):
x = self.conv1(x)
x = self.flatten(x)
x = self.d1(x)
return self.d2(x)
拆分数据集
(x_train, y_train), (x_test, y_test) = tf.keras.datasets.mnist.load_data(path="/datasets/mnistpnz/mnist.npz")

x_train = x_train.reshape(60000, 28, 28, 1).astype("float32") / 255
x_test = x_test.reshape(10000, 28, 28, 1).astype("float32") / 255

# Reserve 10,000 samples for validation
x_val = x_train[-10000:]
y_val = y_train[-10000:]
x_train = x_train[:-10000]
y_train = y_train[:-10000]
训练并验证
model = LeNetModel()
model(x_test[0:1])
model.compile(
optimizer=tf.keras.optimizers.Adam(), # Optimizer
# Loss function to minimize
loss=tf.keras.losses.SparseCategoricalCrossentropy(),
# List of metrics to monitor
metrics=[tf.keras.metrics.SparseCategoricalAccuracy()],
)

history = model.fit(
x_train,
y_train,
batch_size=64,
epochs=1,
# We pass some validation for
# monitoring validation loss and metrics
# at the end of each epoch
validation_data=(x_val, y_val),
)
保存模型
tf.saved_model.save(model, './saved_model/tf_model')