Ввод прогноза в Google Cloud Machine Learning Engine - PullRequest
1 голос
/ 10 апреля 2019

Я успешно обучил и развернул модель для 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?Я могу заставить предсказание работать, если закодирую изображение напрямую, но тогда оно будет очень неэффективным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...