как объединить переменные.data и saved_model.pb в тензорном потоке

Я новичок в тензорном потоке и керасе. Я обучил CNN классификации предложений с помощью keras и экспортировал модель, используя следующий код

K.set_learning_phase(0)
config = model.get_config()
weights = model.get_weights()

new_model = Sequential.from_config(config)
new_model.set_weights(weights)

builder = saved_model_builder.SavedModelBuilder(export_path)
signature = predict_signature_def(
    inputs={'input': new_model.inputs[0]},
    outputs={'prob': new_model.outputs[0]})


with K.get_session() as sess:

    builder.add_meta_graph_and_variables(
        sess=sess,
        tags=[tag_constants.SERVING],
        clear_devices = True,
        signature_def_map={
            signature_constants.DEFAULT_SERVING_SIGNATURE_DEF_KEY: signature}
    )
builder.save()

Я получил variables.data-00000-of-00001 и variables.index в папке переменных и saved_model.pb.

Я хочу объединить эти файлы в один перед развертыванием для прогнозирования. В конце концов, я хочу квантовать модель, поскольку размер файла переменных действительно огромен, и я думаю, прежде чем использовать функцию квантования из tensorflow, мне нужно заморозить мою модель в pb-файле. Пожалуйста помоги


person manoveg    schedule 27.11.2017    source источник


Ответы (2)


Вы можете использовать freeze_graph.py инструмент для объединения ваших файлов в один файл.

Это выведет один файл GraphDef, содержащий все веса и архитектуру.

Вы бы использовали это так:

bazel build tensorflow/python/tools:freeze_graph && \
bazel-bin/tensorflow/python/tools/freeze_graph \
--input_graph=some_graph_def.pb \
--input_checkpoint=model.ckpt-8361242 \
--output_graph=/tmp/frozen_graph.pb --output_node_names=softmax

Где input_graph - ваш saved_model.pb файл.

И где input_checkpoint - ваши переменные в вашей variables папке, и они могут выглядеть так:

/tmp/model/model-chkpt-8361242.data-00000-of-00002
/tmp/model/model-chkpt-8361242.data-00001-of-00002
/tmp/model/model-chkpt-8361242.index
/tmp/model/model-chkpt-8361242.meta

Обратите внимание, что в этом случае вы называете контрольную точку модели как model-chkpt-8361242.

Вы берете префикс каждого файла, который у вас есть, при использовании инструмента freeze_graph.py.

person Clarence Leung    schedule 27.11.2017
comment
Я пробовал, но получаю следующую ошибку raise self.ParseError('Expected identifier or number, got %s.' % result) google.protobuf.text_format.ParseError: 1:1 : Expected identifier or number, got. - person manoveg; 28.11.2017

как вы планируете служить своей моделью? TensorFlow Serving изначально поддерживает SavedModelFormat, не требуя шага freeze_graph.py.

если вы все еще хотите вручную объединить график и переменные (и использовать freeze_graph.py), вам, вероятно, потребуется использовать более старый формат ExportModel, как показано выше у Кларенса.

Кроме того, вы, вероятно, захотите переключиться на API-интерфейс оценщика на этом этапе.

вот несколько примеров, использующих все вышеперечисленное: https://github.com/pipelineai/pipeline

person Chris Fregly    schedule 28.11.2017
comment
в основном я хочу развернуть его на движке Google Cloud ML, и максимальный размер модели составляет 250 МБ. Размер моей модели больше этого. Поэтому я хочу его квантовать. На данный момент я понимаю, что мне нужен замороженный файл .pb, прежде чем я смогу попытаться выполнить квантование. Поправьте меня, если я ошибаюсь. - person manoveg; 29.11.2017