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