Я экспортировал свою модель keras в tenorflow SavedModel и загрузил ее в облачный движок ML для прогнозов. Когда я отправляю запрос json (с вводом в виде числа с плавающей запятой), он правильно выполняет прогнозы. Но когда я отправляю запрос json (со строкой изображения в кодировке base64), я получаю сообщение об ошибке
«Tensor Placeholder_107: 0, указанный либо в feed_devices, либо в fetch_devices, не найден в графике»
K.clear_session()
sess = tf.Session()
K.set_session(sess)
K.set_learning_phase(0)
model = load_model('modelName.h5')
image = tf.placeholder(shape=[None], dtype=tf.string)
export_path = 'path-name'
builder = saved_model_builder.SavedModelBuilder(export_path)
signature = predict_signature_def(inputs={'image_bytes': image},
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()
MetaGraphDef с набором тегов: 'serve' содержит следующие SignatureDefs:
signature_def ['предсказание']:
Указанный SavedModel SignatureDef содержит следующие данные:
inputs['images'] tensor_info:
dtype: DT_STRING
shape: (-1)
name: Placeholder_107:0
Указанный SavedModel SignatureDef содержит следующие выходные данные:
outputs['scores'] tensor_info:
dtype: DT_FLOAT
shape: (-1, 2)
name: activation_14/Softmax:0
Имя метода: тензор потока / обслуживание / прогноз
Передали данные изображения, чтобы преобразовать его в файл JSON, чтобы его можно было отправить в облачный движок ML для прогнозирования.
from base64 import b64encode
from json import dumps
import json
with open(IMAGE_NAME, 'rb') as open_file:
byte_content = open_file.read()
base64_bytes = b64encode(byte_content)
raw_data = {IMAGE_NAME: base64_bytes}
request_body= json.dumps({'images': base64_bytes})
with open('test_data.json', 'w') as outfile:
outfile.write(request_body)
Затем я передаю этот json (кодирование base64 изображения) в облачный движок ML
!gcloud ml-engine predict --model model-name --version version_3 --json-instances test_data.json
Я получаю ошибку ниже
['{', ' "error": "Prediction failed: Error during model execution: AbortionError(code=StatusCode.INVALID_ARGUMENT, details=\\"Tensor Placeholder_107:0, specified in either feed_devices or fetch_devices was not found in the Graph\\")"', '}']
Ранее я отправил вход модели в виде числа с плавающей запятой, как показано ниже
signature = predict_signature_def(inputs={'image_bytes': image},
outputs={'scores': model.output})
в то время
Указанный SavedModel SignatureDef содержит следующие данные:
inputs['images'] tensor_info:
dtype: DT_FLOAT
shape: (-1, 96, 96, 3)
name: conv2d_6_input:0
Я подозреваю, что проблема связана с этой строкой. tf.placeholder (shape = [None], dtype = tf.string).
Как только я изменил определение подписи, чтобы принять tf.placeholder, я столкнулся с проблемой. Я использую tf.placeholder, чтобы он принимал ввод как строку.
Я пробовал много способов увидеть некоторые входные данные от решений SO, но это не помогло
Пожалуйста, совет