在 GCP Ai 平台上进行预测

Posted

技术标签:

【中文标题】在 GCP Ai 平台上进行预测【英文标题】:Predicting on GCP Ai Platform 【发布时间】:2021-11-01 07:56:33 【问题描述】:

我在 GCP AI Platform 上部署了一个 TensorFlow 模型。 该模型预测文本是讽刺 (1) 还是非讽刺 (0)。

文本(使用给定函数“tokenize_text”)表示为两个张量。可能是这样的:

text = tokenize_text('This is a text')
print(text)


>>> <tf.Tensor: shape=(1, 512), dtype=int32, numpy=
array([[  101, 71284, 92947, 11962, 10168, 12830,   102,     0,...]],
array([[1, 1, 1, 1, 1, 1, 1, 0, 0, ...]]>

还有

model.predict(text)    #result: not sarcasm (4%)


>>> array([[0.04065517]], dtype=float32)

现在我想在同一模型上但在 GCP AI 平台上做同样的事情。 因此,输入 ("text") 将被包裹在 JSON 中,因为该模型仅适用于 JSON 文件。但我收到以下错误:

TypeError: EagerTensor 类型的对象不是 JSON 可序列化的

我知道张量不能直接转换为 JSON。但是,在部署到 GCP 之前,我只使用张量进行预测。

你有什么想法/方法吗?

【问题讨论】:

我认为这是自定义预测例程的目的。但我从来没有使用过它们,我帮不了你更多! 谢谢。我发现该解决方案存在问题! @guillaumeblaquiere 【参考方案1】:

我找到了解决此问题的方法。如果您在模型中使用张量进行预测,只需在训练前命名模型的输入即可。

例如:

 # First tensor 
 tf.keras.layers.Input(shape (max_length,),name='input_ids',dtype='int32')
 
 # Second Tensor
 tf.keras.layers.Input(shape (max_length,),name='attention_mask',dtype='int32')

现在我的两个张量需要命名为“input_ids”和“attention_mask”。 如果您使用多个张量,命名张量是有意义的。例如,BERT 模型使用至少两个张量来表示文本。 在 GCP Ai 平台中保存并部署您的模型。

现在你可以预测了。首先将您的张量更改为列表并将它们命名为 json 文件,如下所示:

instances = [
      'input_ids': [int(v.numpy()) for v in list(text[0][0])],
      'attention_mask': [int(v.numpy()) for v in list(text[1][0])]]

print('instances': instances)

您的 json 文件应如下所示(抱歉格式错误):


    'instances': ['input_ids':[101,10216,10339,10299,58606,102,0,0,0,0],
                   'attention_mask': [1, 1, 1, 1, 1, 1, 0, 0, 0, 0]]

您可以根据该输出直接测试您的模型,或使用示例函数来自动化您的请求,该请求已由 Google Ai 平台提供。 为此,转到您的模型和相应的版本,然后转到测试和应用程序。 现在点击使用提供的模型

希望如果有人遇到与我相同的问题,这会有所帮助。

【讨论】:

以上是关于在 GCP Ai 平台上进行预测的主要内容,如果未能解决你的问题,请参考以下文章

GCP:自动缩放为零的 AI ML 服务

在 Vertex AI(谷歌云平台)中使用模型进行预测

安排批量预测 Vertex AI

GCP Vertex AI 中的批量预测

专注预测的AI商业智能平台 所问数据助力“国际版淘宝”Wish新风口

(GCP) AutoML 视觉图像预测——模型的预测功能究竟如何?