GC ML Engine使用两个不同的模型输出相同的结果

时间:2018-11-23 13:49:21

标签: tensorflow keras google-cloud-ml

我在Keras中开发了两个不同版本的模型,并将它们转换为Tensorflow,如下所示:

import keras.backend as K
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 = tensorflow.Session()
K.set_session(sess)

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

# load model
model = load_model('model.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 = 'export-pb-variables'

builder = saved_model_builder.SavedModelBuilder(export_path) #builder = tf.saved_model.builder.SavedModelBuilder(export_path)


signature = predict_signature_def(inputs={'input': new_Model.input}, 
                              outputs={'output': 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()

每个模型都生成.pb文件以及变量文件夹。然后,我测试了可以使用这些文件来还原模型并以这种方式获得预测:

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

with keras.backend.get_session() as sess:
    tf.saved_model.loader.load(sess, [tag_constants.SERVING], path_to_exported_model)
    result = sess.run('dense_1/Sigmoid:0', feed_dict={'lstm1_input_1:0': one_input_example})
    print(result)

在本地,这两个版本是可复制的,并且对于不同的输入参数,应该给我不同的结果。但是,将它们上传到GC以便使用ML Engine进行预测后,这两个版本会产生相同的结果(与本地两个版本中的任何一个的结果都大不相同)。如果我测试其他输入示例,结果将再次相同(但不同输入之间的结果并不完全相同)

您能告诉我可能是什么原因吗?

0 个答案:

没有答案