Code adapted from discussion about this in Tensorflow Serving Issue 310, specifically the recipe suggested by @tspthomas.
In [1]:
    
from tensorflow.python.saved_model import builder as saved_model_builder
from tensorflow.python.saved_model import utils, tag_constants, signature_constants
from tensorflow.python.saved_model.signature_def_utils import build_signature_def, predict_signature_def
from tensorflow.contrib.session_bundle import exporter
import keras.backend as K
from keras.models import load_model
import os
import shutil
K.set_learning_phase(0)
    
    
The model we will use is the best model produced by this Keras model.
In [2]:
    
DATA_DIR = "../../data"
EXPORT_DIR = os.path.join(DATA_DIR, "tf-export")
MODEL_NAME = "keras-mnist-fcn"
MODEL_VERSION = 1
MODEL_BIN = os.path.join(DATA_DIR, "{:s}-best.h5".format(MODEL_NAME))
EXPORT_PATH = os.path.join(EXPORT_DIR, MODEL_NAME)
    
In [3]:
    
model = load_model(MODEL_BIN)
    
In [4]:
    
shutil.rmtree(EXPORT_PATH, True)
    
In [5]:
    
full_export_path = os.path.join(EXPORT_PATH, str(MODEL_VERSION))
builder = saved_model_builder.SavedModelBuilder(full_export_path)
signature = predict_signature_def(inputs={"images": model.input},
                                  outputs={"scores": model.output})
with K.get_session() as sess:
    builder.add_meta_graph_and_variables(sess=sess,
                                         tags=[tag_constants.SERVING],
                                         signature_def_map={"predict": signature})
    builder.save()
    
    
In [ ]: