在 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 平台上进行预测的主要内容,如果未能解决你的问题,请参考以下文章