json int与模型预测中的tf.estimator.export.ServingInputReceiver占位符int32不匹配

时间:2019-09-06 21:11:09

标签: json machine-learning google-cloud-platform prediction tensorflow-estimator

我正在用tf.estimator建立一个cnn模型。它经历了本地培训和预测,云培训,将模型部署到云。对于服务部分,我的json数据集的int类型与占位符int32不匹配。

这是json文件的创建方式。我将实例“键”设置为int类型。由于其输出不遵循输入数据的顺序,因此正在为批量预测做准备。

IMGNO=5
with open(JSON_DATA_5img, "w") as file:
    for i in range(IMGNO):
        jsondata = {"image": test_images[i].reshape([HEIGHT,WIDTH]).tolist(), "key":  i}
        file.write(json.dumps(jsondata) + '\n')

我的服务输入功能定义为

def serving_input_fn():

    feature_placeholders = {"image": tf.placeholder(dtype = tf.float32, shape = [None, HEIGHT, WIDTH]),"key": tf.placeholder(dtype = tf.int32, shape = [])}

    features = {"image": tf.expand_dims(input = feature_placeholders["image"], axis = -1),"key": tf.placeholder(dtype = tf.int32, shape = [])} 
    return tf.estimator.export.ServingInputReceiver(features =  features, receiver_tensors =  feature_placeholders)

我的火车/ val输入数据具有类似{'image':image,'key':some_int}的结构,因此我希望在预测输入中具有相同的结构。

我首先进行了快速的在线预测。当我将其提交到Google Cloud时,它会返回此错误。

{
  "error": "Prediction failed: Error during model execution: AbortionError(code=StatusCode.INVALID_ARGUMENT, details=\"You must feed a value for placeholder tensor 'Placeholder_2' with dtype int32\n\t [[{{node Placeholder_2}}]]\")"
}

我试图将json文件中的'key'更改为int32

       jsondata = {"image": test_images[i].reshape([HEIGHT,WIDTH]).tolist(), "key":  np.int32(i)} 

但是我得到一个错误,即json不接受它。

TypeError: Object of type 'int32' is not JSON serializable

当我转向占位符的dtype时,我只能选择int32,int64,int16 ...,json文件中没有int选项。

有什么建议吗?

0 个答案:

没有答案