初始v3采取base64图像进行谷歌ml引擎的预测

时间:2018-06-09 20:57:24

标签: python tensorflow keras

我正在尝试更改我的初始网络(以keras编码)以将base64图像字符串作为预测的输入。之后,我想将其保存为张量流(.pb - 文件)网络,因为这是Google ml引擎所需要的。

正常的预测方式是:

img = "image.jpg"
image = image.load_img(img)


x = image.img_to_array(image)
x = np.expand_dims(x, axis=0)
x = preprocess_input(x)
score = model.predict(x)

所以我正在尝试实现它,然后像这样保存它:

input_images = tf.placeholder(dtype=tf.string, shape=[])
decoded = tf.image.decode_image(input_images, channels=3)
image = tf.cast(decoded, dtype=tf.uint8)
afbeelding = Image.open(io.BytesIO(image))

x = image.img_to_array(afbeelding)
x = np.expand_dims(x, axis=0)
x = preprocess_input(x)
scores = model.predict(decoded)


signature = predict_signature_def(inputs={'image_bytes': input_images},
                              outputs={'predictions': scores})

with K.get_session() as sess:
    builder.add_meta_graph_and_variables(sess=sess,
                                     tags=[tag_constants.SERVING],
                                     signature_def_map={
                                     signature_constants.DEFAULT_SERVING_SIGNATURE_DEF_KEY: signature})
builder.save()

但是图像是张量,而不是实际图像。 说实话,我不知道如何全面实施它。没有办法让张量的实际值正​​确吗?真的希望有人能帮助我。

1 个答案:

答案 0 :(得分:-1)

您应该能够使用tensorflow.keras.estimator.model_to_estimator()函数将Keras模型转换为TensorFlow估计器。然后,您可以构建和导出图形以生成预测。代码应如下所示:

from tensorflow import keras
h5_model_path = os.path.join('path_to_model.h5')
estimator = keras.estimator.model_to_estimator(keras_model_path=h5_model_path)

我仅在使用tf.keras构建的模型中对此进行了测试,但是应该在本机Keras模型中进行了测试。

然后使用组件来构建图形以处理base64输入,您可以执行以下操作:

import tensorflow as tf
HEIGHT = 128
WIDTH = 128
CHANNELS = 3
def serving_input_receiver_fn():
    def prepare_image(image_str_tensor):
        image = tf.image.decode_jpeg(image_str_tensor, channels=CHANNELS)
        image = tf.expand_dims(image, 0)
        image = tf.image.resize_bilinear(image, [HEIGHT, WIDTH], align_corners=False)
        image = tf.squeeze(image, axis=[0])
        image = tf.cast(image, dtype=tf.uint8)
        return image

    input_ph = tf.placeholder(tf.string, shape=[None])
    images_tensor = tf.map_fn(
        prepare_image, input_ph, back_prop=False, dtype=tf.uint8)
    images_tensor = tf.image.convert_image_dtype(images_tensor, dtype=tf.float32)

    return tf.estimator.export.ServingInputReceiver(
        {'input': images_tensor},
        {'image_bytes': input_ph})

export_path = 'exported_model_directory'
estimator.export_savedmodel(
    export_path,
    serving_input_receiver_fn=serving_input_receiver_fn)

随后可以将导出的模型上传到Google Cloud ML,并用于提供预测。我花了一些时间努力使所有这些东西都起作用,并整理了一个可能会额外使用的功能齐全的代码示例。在这里:https://github.com/mhwilder/tf-keras-gcloud-deployment