сохранить модель с размером партии = 1 для вывода - PullRequest
0 голосов
/ 13 декабря 2018

Я использовал 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?

...