KeyError: Замороженная модель тензорного потока в граф UFF

Я обучил пользовательскую модель CNN API Tensorflow Estimator. Я успешно заморозил график, но преобразование в UFF завершается неудачно и выдает следующую ошибку:

'KeyError: u'IteratorGetNext:1'

Код для выполнения указанного преобразования:

frozen_graph_filename = "Frozen_model.pb"
TMP_UFF_FILENAME = "output.uff"
output_name = "sigmoid"

uff_model = uff.from_tensorflow_frozen_model(
    frozen_file=frozen_graph_filename,
    output_nodes=[output_name],
    output_filename=TMP_UFF_FILENAME,
    text=False,
)

Имена узлов в графе:

prefix/OneShotIterator
prefix/IteratorGetNext
prefix/Reshape/shape
prefix/Reshape
prefix/Reshape_1/shape
prefix/Reshape_1
prefix/conv1/kernel
prefix/conv1/bias
.
.
.
prefix/logits/MatMul
prefix/logits/BiasAdd
prefix/sigmoid

Так есть ли способ удалить первые два узла Iterator? Они бесполезны вне учебного контекста. Я также использовал tf.graph_util.remove_training_nodes но это не облегчает проблему, с которой я сталкиваюсь.

1 ответ

Решение

Инструмент Преобразования Графа можно использовать для выполнения именно того, чего я хотел достичь, чтобы иметь возможность использовать этот инструмент, необходимо клонировать репозиторий тензорного потока и запустить файл конфигурации для настройки рабочего пространства. Следуйте инструкциям, приведенным в 1, чтобы построить инструмент. После этого вызовите инструмент,

bazel-bin/tensorflow/tools/graph_transforms/transform_graph \
--in_graph=tensorflow_inception_graph.pb \
--out_graph=optimized_inception_graph.pb \
--inputs='Mul:0' \
--outputs='softmax:0' \
--transforms='
strip_unused_nodes(type=float, shape="1,299,299,3")
remove_nodes(op=Identity, op=CheckNumerics)
fold_old_batch_norms
'

Как только вы получите оптимизированный график, передайте его

uff.from_tensorflow_frozen()

https://github.com/tensorflow/tensorflow/blob/master/tensorflow/tools/graph_transforms/README.md 1 https://www.tensorflow.org/mobile/prepare_models

Другие вопросы по тегам