我使用retrain.py示例重新训练了Inception模型,并使用–saved_model_dir标志导出了模型,以便在最后进行服务部署。
我成功地上传了最终模型到Google ML引擎,现在正尝试运行预测。
我的请求看起来像这样:
{"image": {"b64": "/9j/4AAQxh6AP/2Q== ..."}}
但我收到的错误信息是:
{"error": "Prediction failed: Error processing input: Expected float32, got '\\xff\\xd8\\xff\\xe0 ...' of type 'str' instead."}
retrain.py中的导出示例是否不适合用于Google ML引擎?
回答:
错误信息表明导出的模型期望的是浮点数数组而不是原始图像字节。我通过代码追踪确认了这一点。具体来说,export_model
调用了build_eval_session
来获取resized_input_tensor
,它是在create_module_graph
中创建的,如下所示(链接):
resized_input_tensor = tf.placeholder(tf.float32, [None, height, width, 3])
因此,数据应该看起来像这样:
{ "image": [ [ [0.0, 0.0, 0.0], # ... (条目数 = 高度) ], # (条目数 = 宽度) ]}
当然,这种编码图像的方式(将浮点数作为ASCII)相当低效。如果预期的图像尺寸较小(通常是200 x 200),这还不算太糟糕。更好的方法是,如果示例的作者允许通过调用add_jpeg_decoding
来导出模型作为模型的入口点,这样你就可以像你现在尝试的那样发送数据了。