在Google ML上运行导出的Inception模型:期望float32类型但得到的是’str’

我使用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来导出模型作为模型的入口点,这样你就可以像你现在尝试的那样发送数据了。

Related Posts

Keras Dense层输入未被展平

这是我的测试代码: from keras import…

无法将分类变量输入随机森林

我有10个分类变量和3个数值变量。我在分割后直接将它们…

如何在Keras中对每个输出应用Sigmoid函数?

这是我代码的一部分。 model = Sequenti…

如何选择类概率的最佳阈值?

我的神经网络输出是一个用于多标签分类的预测类概率表: …

在Keras中使用深度学习得到不同的结果

我按照一个教程使用Keras中的深度神经网络进行文本分…

‘MatMul’操作的输入’b’类型为float32,与参数’a’的类型float64不匹配

我写了一个简单的TensorFlow代码,但不断遇到T…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注