#python #tensorflow #lstm #amazon-sagemaker #tensorflow-serving
#python #тензорный поток #lstm #amazon-sagemaker #тензорный поток-обслуживание
Вопрос:
У меня есть сеть LSTM с 3 входами и 3 выходами (построенная с помощью функционального api в Tf.keras), которую я пытаюсь развернуть как конечную точку sagemaker. У меня есть форма ввода (None, 10,1) для каждого ввода / функции, что означает 10 временных шагов.(Позже я объединю вложения, но это здесь неуместно)
Все отлично работает во время обучения и в учебных заданиях sagemaker, и обучение завершается, и артефакты создаются успешно. Но во время вызова конечная точка не работает для прогнозирования 1 example, having 10 timesteps with 3 inputs
, я пробовал несколько вещей, но не могу предоставить три входа для прогнозирования (input_1, input_2, input_1).
Как я уже сказал, каждый вход имеет 10 временных шагов, поэтому имеет форму (10,1). Конечная точка возвращает выходные данные только в том случае, если я форматирую свою полезную нагрузку, как показано ниже, но при этом он обрабатывает каждый временной шаг как отдельный пример / экземпляр и возвращает 10 прогнозов для каждого вывода
{'inputs':{
'input_1': [[0], [0], [0], [0], [2], [12], [11], [7], [7], [2]],
'input_2': [[0], [0], [0], [0], [30], [21], [2], [15], [27], [30]],
'input_3': [[0], [0], [0], [0], [6], [2], [3], [13], [15], [6]]}
} # gives len(pred['output_1"])) == 10
Это ожидаемо, поскольку он рассматривает этот запрос как 10 примеров, но в моем случае это один пример с 10 временными шагами для каждой функции (1,10,1). Итак, я попробовал разные вещи из документации. Например, использование экземпляров.
{'instances': [
{
'input_1': [[0],[0], [0],[0],[2],[12],[11], [7], [7], [2]],
'input_2': [[0], [0], [0], [0], [30], [21], [2], [15], [27], [30]],
'input_3': [[0], [0], [0], [0], [6], [2], [3], [13], [15], [6]]
}
]
}
Но это выдает эту ошибку.
транспонирование ожидает вектор размером 4. Но вход (1) представляет собой вектор размером 3 n t [[{{node transpose_1}}]]n t [[functional_1/lstm / PartitionedCall]]n t [[StatefulPartitionedCall / StatefulPartitionedCall]]»n}»}»
В документе также приведен пример и говорится
для моделей с несколькими именованными входами просто включите все ключи во входной dict
но когда я использую это, я получаю сообщение об ошибке Missing 'inputs' or 'instances' key"n}"
{'input_1': [[0], [0], [0], [0], [2], [12], [11], [7], [7], [2]],
'input_2': [[0], [0], [0], [0], [30], [21], [2], [15], [27], [30]],
'input_3': [[0], [0], [0], [0], [6], [2], [3], [13], [15], [6]]}
Мой код вызова приведен ниже.
import boto3
import json
sm = boto3.client('sagemaker-runtime')
endpoint_name = "tensorflow--------------------4"
response = sm.invoke_endpoint(EndpointName=endpoint_name,
Body=json.dumps(payload),
ContentType='application/json')
Я не уверен, как решить эту проблему, с нетерпением жду помощи