Я успешно обучил и развернул модель для CMLE.Есть небольшая проблема, когда я пытаюсь использовать ее для прогнозирования.В моей модели я определил функцию входного обслуживания как
def serving_input_receiver_fn():
def decode_and_resize(image_str_tensor):
"""Decodes jpeg string, resizes it and returns a float32 tensor."""
image_str_tensor = tf.decode_base64(image_str_tensor)
image = tf.image.decode_jpeg(image_str_tensor, channels=3)
image = tf.expand_dims(image, 0)
image = tf.image.resize_bilinear(image, [input_size[0], input_size[1]], align_corners=False)
image = tf.squeeze(image, squeeze_dims=[0])
image = tf.div(image, 255.0)
return image
input_ph = tf.placeholder(tf.string, shape=[None])
images_tensor = tf.map_fn(decode_and_resize, input_ph, back_prop=False, dtype=tf.float32)
return tf.estimator.export.ServingInputReceiver({'input_1': images_tensor},
{'image_bytes': input_ph})
и для генерации файла json я использовал
with open(json_path, 'w') as ff:
for image_path in test_imgs:
with open(image_path, 'rb') as image:
img_bytes = base64.urlsafe_b64encode(image.read())
row = json.dumps({'input_1': "name",
'image_bytes': {'b64': img_bytes.decode('ascii')}})
Однако я всегда получаю журнал ошибок
error_detail: {
detail: "Exception during running the graph: Invalid character found in base64.
[[node map/while/DecodeBase64 (defined at /usr/local/lib/python2.7/dist-packages/google/cloud/ml/prediction/frameworks/tf_prediction_lib.py:210) ]]"
input_snippet: "{"input_1": "name", "image_bytes": {"b64": "_9j_4AAQSkZJRgABAQAAAQABAAD_2wBDAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ...
}
message: "Exception during running the graph: Invalid character found in base64.
Кажется, что движок неправильно декодирует кодировки base64?Я могу заставить предсказание работать, если закодирую изображение напрямую, но тогда оно будет очень неэффективным.