Я использовал DNNLinearCombinedClassifier с частичными входами от модифицированного выхода Transformer.Модель обучается с помощью input_fn, который получает данные из пакетного набора данных.
Когда модель сохраняется (показано ниже), она всегда выбирает batch_size (используйте 128 в качестве примера) из обучения для ввода и вывода.тензоры.В результате при выводе, когда предсказывается только одна запись, я получаю ошибку: ValueError: Невозможно передать значение shape (1,) для Tensor u'input_fn / xxxx: 0 ', имеющего shape' (128,) '
Вот функция сохранения модели:
def export_model():
with ops.Graph().as_default() as graph:
chk_pt_path = saver.latest_checkpoint(output_path)
with tf_session.Session() as session:
saver_for_restore = tf.train.import_meta_graph(chk_pt_path + '.meta')
saver_for_restore.restore(session, chk_pt_path)
input_tensors = [graph.get_tensor_by_name(x) for x in input_tenstor_names]
input_tensor_infos = [tf.saved_model.utils.build_tensor_info(x) for x in input_tensors]
inputs = dict(zip(input_tenstor_names, input_tensor_infos))
output_tensor = graph.get_tensor_by_name(output_tensor_name)
output_tensor_info = tf.saved_model.utils.build_tensor_info( output_tensor)
prediction_signature = ( tf.saved_model.signature_def_utils.build_signature_def(inputs=inputs, outputs={'prediction': output_tensor_info}, method_name=tf.saved_model.signature_constants.PREDICT_METHOD_NAME))
builder = saved_model_builder.SavedModelBuilder(output_path))
builder.add_meta_graph_and_variables(
session, [tf.saved_model.tag_constants.SERVING],
signature_def_map={ tf.saved_model.signature_constants.DEFAULT_SERVING_SIGNATURE_DEF_KEY:
prediction_signature,})
builder.save()
Даже если я передам тензорную форму (1,) входным и выходным объектам TensorInfo, сохраненная модель по-прежнему имеет входной и выходной тензорный размериз (train_batch_size,).Единственный обходной путь - снова тренировать модель с размером партии = 1, что крайне неудобно.Как сохранить модель с размером входного и выходного тензора 1?