【问题标题】:Predicting on GCP Ai Platform在 GCP Ai 平台上进行预测
【发布时间】: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

标签: json tensorflow google-cloud-platform google-cloud-ai


【解决方案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 平台提供。 为此,转到您的模型和相应的版本,然后转到测试和应用程序。 现在点击使用提供的模型

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

【讨论】:

    猜你喜欢
    • 2021-07-19
    • 2020-11-05
    • 2022-01-12
    • 2021-01-05
    • 2022-01-18
    • 2020-10-12
    • 1970-01-01
    • 2021-12-09
    • 2020-02-27
    相关资源
    最近更新 更多