GCP ML Engine部署TensorFlow模型后在线预测JSON输入问题求助
看起来你在把Jose Portilla课程里的LSTM模型部署到GCP ML Engine后,遇到了JSON输入无法正确传入的问题,我来帮你排查几个常见的关键点:
1. 先修正JSON的基础语法错误
你给出的test.json内容末尾有明显的语法问题:{"inputs":[1,2,3,4,5,6,7,8,9...} 这里缺少了闭合的]},正确的单样本格式应该是:
{"inputs": [1,2,3,4,5,6,7,8,9]}
如果是批量预测(多个样本),需要每行放一个独立的JSON对象(不要用数组整体包裹):
{"inputs": [1,2,3,4,5,6,7,8,9]} {"inputs": [10,11,12,13,14,15,16,17,18]}
2. 确认模型输入张量名称是否匹配
ML Engine会严格按照模型保存时的输入张量名称来匹配JSON里的键。你需要先确认你的模型输入张量的名字是不是"inputs",可以用TensorFlow自带的saved_model_cli工具查看模型签名:
saved_model_cli show --dir /path/to/your/local/saved_model --all
在输出里找到signature_def['serving_default']下的inputs部分,比如如果显示的是lstm_input,那你的JSON里的键就要改成"lstm_input"而非"inputs"。
3. 调整输入数据的形状以适配LSTM模型
LSTM模型通常要求输入是二维形状(格式为[batch_size, sequence_length]),如果你直接传一维数组[1,2,...9],模型会识别成[9]的形状,不符合要求。这时候需要把输入改成二维数组:
{"inputs": [[1,2,3,4,5,6,7,8,9]]}
这样ML Engine会把它识别为批量大小为1的样本,每个样本的序列长度是9,和LSTM的输入要求匹配。
4. 检查gcloud命令的格式正确性
确保版本参数的格式正确,建议用等号连接或者引号包裹完整参数:
gcloud ml-engine predict --model='lstm_test' --version='v3' --json-instances ./test.json
另外,刚部署的模型版本可能需要几分钟完成初始化,别急着立刻执行预测命令。
按照这几个步骤排查下来,应该能解决你遇到的JSON输入问题。
内容的提问来源于stack exchange,提问作者vortex

