Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 对图像进行ML引擎请求_Python 3.x_Numpy_Keras_Google Cloud Ml - Fatal编程技术网

Python 3.x 对图像进行ML引擎请求

Python 3.x 对图像进行ML引擎请求,python-3.x,numpy,keras,google-cloud-ml,Python 3.x,Numpy,Keras,Google Cloud Ml,我正在尝试为我的ML引擎模型设计正确的请求 我明白了 我使用生成了一个示例请求 python -c 'req = []; [req.append(0.2) for i in range(224*224)]; print(req)' &> request-float32.json 我使用以下代码段生成了协议缓冲区版本 # convert keras model to mlengine model import keras.backend as K import tensorflow

我正在尝试为我的ML引擎模型设计正确的请求

我明白了

我使用生成了一个示例请求

python -c 'req = []; [req.append(0.2) for i in range(224*224)]; print(req)' &> request-float32.json
我使用以下代码段生成了协议缓冲区版本

# convert keras model to mlengine model
import keras.backend as K
import tensorflow as tf
from keras.models import load_model, Sequential
from tensorflow.python.saved_model import builder as saved_model_builder
from tensorflow.python.saved_model import tag_constants, signature_constants
from tensorflow.python.saved_model.signature_def_utils_impl import predict_signature_def

# reset session
K.clear_session()
sess = tf.Session()
K.set_session(sess)

# disable loading of learning nodes
K.set_learning_phase(0)

# load model
model = load_model('vgg16_no_augmentation.h5')
config = model.get_config()
weights = model.get_weights()
new_Model = Sequential.from_config(config)
new_Model.set_weights(weights)

# export saved model
export_path = 'mlengine-03' + '/export'
builder = saved_model_builder.SavedModelBuilder(export_path)

signature = predict_signature_def(inputs={'foo-input': new_Model.input},
                                  outputs={'serve': new_Model.output})

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()
这个模型是6号牢房的

(我稍微偏离了链接模型,它使用的是input_dim=4*4*512,我使用的是更大的)


我知道25088=7*7*512,这是模型中的输入尺寸。但是我不确定如何从一个图像到一个包含25088个浮动的文件?

挑战在于,您必须在图像客户端使用卷积基,然后将提取的特征发送到模型托管服务

取而代之,我选择使用模型的一个版本,该版本将卷积基集成到模型中。然后我创建了一个简单的api来运行模型,接受图像上传并在将图像输入模型之前调整其大小


中可以看到,其思想是首先通过特征提取器(模型的卷积基)传递图像,将这些特征(形状为7*7*512)存储在案例中,然后通过分类器传递这些特征。您使用代码保存的具体型号是什么?卷积模型,还是分类器?笔记本电脑上的VGG模型需要形状的图像(1501503)。假设您正试图请求来自卷积模型的预测,那么您可能希望使用(224*224*3)浮点数而不是(224*224)来填充请求json?不,输入几乎肯定是7*7*512,因为这是模型第一层的输入。我认为你是对的,我需要客户端应用程序中卷积基的副本,以便创建用于推断的输入内核中的第二个示例将卷积基集成到模型中,我试着用它来代替。@Harrymorno您提到过输入尺寸是25088,错误消息清楚地表明它期望输入的尺寸。您的问题是如何获取实际图像并将其转换为具有正确大小的服务的有效json请求?问题是如何创建一个与模型一起工作的请求。我在内核中使用了第二个版本的模型,这允许我们将原始图像发送到模型主机,主机可以在输入上使用模型之前对图像进行预处理。
# convert keras model to mlengine model
import keras.backend as K
import tensorflow as tf
from keras.models import load_model, Sequential
from tensorflow.python.saved_model import builder as saved_model_builder
from tensorflow.python.saved_model import tag_constants, signature_constants
from tensorflow.python.saved_model.signature_def_utils_impl import predict_signature_def

# reset session
K.clear_session()
sess = tf.Session()
K.set_session(sess)

# disable loading of learning nodes
K.set_learning_phase(0)

# load model
model = load_model('vgg16_no_augmentation.h5')
config = model.get_config()
weights = model.get_weights()
new_Model = Sequential.from_config(config)
new_Model.set_weights(weights)

# export saved model
export_path = 'mlengine-03' + '/export'
builder = saved_model_builder.SavedModelBuilder(export_path)

signature = predict_signature_def(inputs={'foo-input': new_Model.input},
                                  outputs={'serve': new_Model.output})

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()