我正在用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选项。
有什么建议吗?