optimize_for_inference_lib.optimize_for_inference не объединяет слои batchnorm? - PullRequest
0 голосов
/ 24 мая 2019

Я скачал https://storage.googleapis.com/download.tensorflow.org/models/inception_v3_2016_08_28_frozen.pb.tar.gz пример из https://www.tensorflow.org/guide/extend/model_files и попытался преобразовать его в оптимизированный график:

import tensorflow as tf
from tensorflow.python.tools import optimize_for_inference_lib

input_graph_path = './inception_v3_2016_08_28_frozen.pb'
output_optimized_graph_name = './model_optimized.pb'
input_node_names = ['input']
output_node_names = ['InceptionV3/Predictions/Reshape_1']

input_graph_def = tf.GraphDef()
with tf.gfile.Open(input_graph_path, "rb") as f:
    data = f.read()
    input_graph_def.ParseFromString(data)
    output_graph_def = optimize_for_inference_lib.optimize_for_inference(
            input_graph_def,
            input_node_names,
            output_node_names,
            tf.float32.as_datatype_enum)

f = tf.gfile.FastGFile(output_optimized_graph_name, "w")
f.write(output_graph_def.SerializeToString())

Затем, используя bazel-bin/tensorflow/tools/graph_transforms/summarize_graph, я проверил исходный график и оптимизировалНа графике они примерно одинаковы:

Оригинал:

Found 1 possible inputs: (name=input, type=float(1), shape=[1,299,299,3]) 
No variables spotted.
Found 1 possible outputs: (name=InceptionV3/Predictions/Reshape_1, op=Reshape) 
Found 23853946 (23.85M) const parameters, 0 (0) variable parameters, and 0 control_edges
Op types used: 489 Const, 379 Identity, 188 Mul, 188 Add, 95 Conv2D, 94 Sub, 94 Rsqrt, 94 Relu, 15 ConcatV2, 10 AvgPool, 4 MaxPool, 2 Reshape, 1 BiasAdd, 1 Softmax, 1 Squeeze, 1 Placeholder

Оптимизировано:

Found 1 possible inputs: (name=input, type=float(1), shape=None) 
No variables spotted.
Found 1 possible outputs: (name=InceptionV3/Predictions/Reshape_1, op=Reshape) 
Found 23853946 (23.85M) const parameters, 0 (0) variable parameters, and 0 control_edges
Op types used: 489 Const, 188 Mul, 188 Add, 95 Conv2D, 94 Sub, 94 Relu, 94 Rsqrt, 15 ConcatV2, 10 AvgPool, 4 MaxPool, 2 Reshape, 1 BiasAdd, 1 Softmax, 1 Squeeze, 1 Placeholder

Почему входная фигура отбрасывается после преобразования?Можно ли сохранить фигуру или отредактировать график, чтобы добавить фигуру после преобразования (вот примечание о сворачивании BN https://github.com/tensorflow/tensorflow/blob/master/tensorflow/python/tools/optimize_for_inference_lib.py#L28)?

Почему нормы партии не объединяются в слоях конв? Глядя на визуализацию графика с помощью netron Я вижу такие операции, которые я подозреваю, это BN. enter image description here

ОБНОВЛЕНИЕ:

Относительно BN кажетсяподдерживаются только BatchNormWithGlobalNormalization и FusedBatchNorm

https://github.com/tensorflow/tensorflow/blob/master/tensorflow/python/tools/optimize_for_inference_lib.py#L70

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...