我遵循了本教程,并达到了可以使用以下代码测试预测的地步:
{
"instances": [
{"csv_row": "44, Private, 160323, Some-college, 10, Married-civ-spouse, Machine-op-inspct, Husband, Black, Male, 7688, 0, 40, United-States", "key": "dummy-key"}
]
}
然而,我得到了以下错误:
{
"error": "{ "error": "Serving signature name: \"serving_default\" not found in signature def" }"
}
我认为输入格式并不代表预期的输入,但也不完全应该是预期的。
关于是什么原因导致示例代码抛出这个错误,有什么想法吗?
我终于想通了:我在jupyter笔记本中加载了tensorflow模型,并打印出签名:
new_model = tf.keras.models.load_model('modelPath')
print(list(new_model.signatures.keys()))
结果是:[预测]
所以我用来得到预测的命令是:
georg@Georgs-MBP~%gcloud ai平台预测
--模型$model_NAME
-版本"v1">
--json实例sample_input.json
--format"值(预测[0]。类[0](">
-签名名称"预测";
结果:使用端点[https://europe-west3-ml.googleapis.com/]<50K
添加签名serving_default:
import tensorflow as tf
m = tf.saved_model.load("tf2-preview_inception_v3_classification_4")
print(m.signatures) # _SignatureMap({}) - Empty
t_spec = tf.TensorSpec([None,None,None,3], tf.float32)
c_func = m.__call__.get_concrete_function(inputs=t_spec)
signatures = {'serving_default': c_func}
tf.saved_model.save(m, 'tf2-preview_inception_v3_classification_5', signatures=signatures)
# Test new model
m5 = tf.saved_model.load("tf2-preview_inception_v3_classification_5")
print(m5.signatures) # _SignatureMap({'serving_default': <ConcreteFunction signature_wrapper(*, inputs) at 0x17316DC50>})