python - GCP ML 引擎预测失败:处理输入时出错:预期 float32 得到 base64
问题描述
我正在尝试对部署到 GCP ML 引擎的自定义训练 TensorFlow 模型进行预测。当我试图调用模型上的预测时,它返回以下错误消息“Expected float32 got base64”
- 按照官方文档,我使用迁移学习和 TensorFlow 的retrain.py脚本在我的图像上训练我的模型
python retrain.py --image_dir ~/training_images saved_model_dir /saved_model_directory
- 我已经使用 TensorFlow 的label_img.py脚本在本地测试了预测,预测在本地对我的图像有效
python label_image.py --graph=/tmp/output_graph.pb --labels=/tmp/output_labels.txt --input_layer=Placeholder --output_layer=final_result \
- 如 retrain.py 脚本的文档中所述,我已导出我的模型以与 Tensorflow Serving 一起使用。
python retrain.py --image_dir ~/training_images --saved_model_dir /saved_model_directory
我已将模型上传到 Firebase,GCP 验证并接受了我的模型,我能够触发我的模型。
尝试调用在线预测时,我收到“Expected float32”错误。
test.json ={"image_bytes": {"b64": "/9j/4AAQSkZJ.......=="}}
gcloud ml-engine predict \
--model my_model \
--version v1 \
--json-instances ./test.json
我是否需要修改 retrain.py 以使我保存的模型接受 base64 或者是否有其他解决方案?
我已经检查了以下答案,但不幸的是它并没有解决我的问题: 如何将 base64 编码图像传递给 Tensorflow 预测?
解决方案
问题是retrain.py
导出一个模型,其输入期望以浮点数的形式解码和调整大小的图像(参见这一行),但您传递的是原始的、未解码的图像数据。
有两种解决方案。
- 以预期格式(浮点数)创建 JSON 请求。这是一个简单的解决方法,但可能会影响性能(将 float32 数据作为 JSON 发送可能效率低下)。
- 更改模型以接受原始图像数据作为输入。这需要对模型进行一些修改。
对于 (1),您将发送一个类似于以下内容的 JSON 文件:
{"images": [[[0.0, 0.0, 0.0], [0,0,0], [...]], [...], ...]}
当然,您可能会使用一些客户端库来构建它
(2) 涉及更多一点。此示例可以指导您如何做到这一点。
推荐阅读
- windows - 什么是 MongoDB 二进制文件,它们位于何处?
- powerbi - 基于切片器(其他表)在矩阵视觉 Power BI 中显示/隐藏列
- javascript - 循环 json 对象以获取特定键的值
- jquery - 它的问题是在 url 中使用“-”后删除所有查询字符串
- java - 为 XSS 转义括号
- node.js - vsc中代码节点自动完成的问题
- sql - 按值列表排序
- firebase - firebase 管理员:您的应用程序已使用不受支持的 Google Cloud SDK 或 Google Cloud Shell 的最终用户凭据进行身份验证
- pascalscript - 掩码编辑:未知标识符“TEXT”
- javascript - vue 使用正则表达式添加掩码验证输入