Есть несколько способов сделать это, и другие методы могут потребоваться для более сложных моделей.В настоящее время я использую метод, описанный здесь , который прекрасно работает для моделей tf.keras.models.Model и tf.keras.Sequential (не уверен для подклассов тензорного потока?).
Ниже приведеноминимальный рабочий пример, в том числе создание модели с использованием python (кажется, что вы уже выполнили ее с помощью структуры папок и можете игнорировать первый шаг)
import tensorflow as tf
from tensorflow.keras.layers import Input, Dense
from tensorflow.keras.models import Model
import tensorflow.keras.backend as K
inputs = Input(shape=(2,))
x = Dense(128, activation='relu')(inputs)
x = Dense(32, activation='relu')(x)
outputs = Dense(1)(x)
model = Model(inputs=inputs, outputs=outputs)
model.compile(optimizer='adam', loss='mse')
# loading existing weights, model architectural must be the same as the existing model
#model.load_weights(".//MODEL_WEIGHT_PATH//WEIGHT.h5")
export_path = 'SAVE_PATH//tensorflow_model//1'
with K.get_session() as sess:
tf.saved_model.simple_save(
sess,
export_path,
inputs={'inputs': model.input}, # for single input
#inputs={t.name[:-5]: t for t in model.input}, # for multiple inputs
outputs={'outputs': model.output})
Я предлагаю вместо этого использовать имя папки "tenensor_model"«тензор потока модели», чтобы избежать возможных проблем с пробелами.
Затем мы можем построить образ докера в терминале с помощью (для окон используйте ^ вместо \ для линейного тормоза и используйте // C / вместоC: \ in path):
docker run -p 8501:8501 --name tfserving_test \
--mount type=bind,source="SAVE_PATH/tensorflow_model",target=/models/tensorflow_model \
-e MODEL_NAME=tensorflow_model -t tensorflow/serving
Теперь контейнер должен быть запущен, и мы можем проверить обслуживание с помощью python
import requests
import json
#import numpy as np
payload = {
"instances": [{'inputs': [1.,1.]}]
}
r = requests.post('http://localhost:8501/v1/models/tensorflow_model:predict', json=payload)
print(json.loads(r.content))
# {'predictions': [[0.121025]]}
Контейнер работает с нашей моделью,давая прогноз 0,121025 для входа [1, 1.]