我尝试使用TensorFlow后端在我的Keras模型构建的推理阶段对性能进行基准测试。我认为Tensorflow Benchmark工具是正确的方法。
我已经设法使用tensorflow_inception_graph.pb
在桌面上构建和运行示例,一切似乎都正常。
我似乎无法弄清楚如何将Keras模型保存为正确的.pb
模型。我能够从Keras模型中获取TensorFlow图表,如下所示:
import keras.backend as K
K.set_learning_phase(0)
trained_model = function_that_returns_compiled_model()
sess = K.get_session()
sess.graph # This works
# Get the input tensor name for TF Benchmark
trained_model.input
> <tf.Tensor 'input_1:0' shape=(?, 360, 480, 3) dtype=float32>
# Get the output tensor name for TF Benchmark
trained_model.output
> <tf.Tensor 'reshape_2/Reshape:0' shape=(?, 360, 480, 12) dtype=float32>
我现在一直试图以几种不同的方式保存模型。
import tensorflow as tf
from tensorflow.contrib.session_bundle import exporter
model = trained_model
export_path = "path/to/folder" # where to save the exported graph
export_version = 1 # version number (integer)
saver = tf.train.Saver(sharded=True)
model_exporter = exporter.Exporter(saver)
signature = exporter.classification_signature(input_tensor=model.input, scores_tensor=model.output)
model_exporter.init(sess.graph.as_graph_def(), default_graph_signature=signature)
model_exporter.export(export_path, tf.constant(export_version), sess)
哪个文件夹包含一些我不知道该怎么做的文件。
我现在用类似的东西运行Benchmark工具
bazel-bin/tensorflow/tools/benchmark/benchmark_model \
--graph=tensorflow/tools/benchmark/what_file.pb \
--input_layer="input_1:0" \
--input_layer_shape="1,360,480,3" \
--input_layer_type="float" \
--output_layer="reshape_2/Reshape:0"
但无论我试图使用哪个档案what_file.pb
,我都会Error during inference: Invalid argument: Session was not created with a graph before Run()!
答案 0 :(得分:3)
所以我得到了这个工作。只需将张量流图中的所有变量转换为常量,然后保存图定义。
这是一个小例子:
import tensorflow as tf
from keras import backend as K
from tensorflow.python.framework import graph_util
K.set_learning_phase(0)
model = function_that_returns_your_keras_model()
sess = K.get_session()
output_node_name = "my_output_node" # Name of your output node
with sess as sess:
init_op = tf.global_variables_initializer()
sess.run(init_op)
graph_def = sess.graph.as_graph_def()
output_graph_def = graph_util.convert_variables_to_constants(
sess,
sess.graph.as_graph_def(),
output_node_name.split(","))
tf.train.write_graph(output_graph_def,
logdir="my_dir",
name="my_model.pb",
as_text=False)
现在只需使用my_model.pb
作为图表调用TensorFlow Benchmark工具。
答案 1 :(得分:0)
您要保存此模型的参数,而不是图表定义;保存使用tf.get_default_graph().as_graph_def().SerializeToString()
,然后将其保存到文件中。
那就是说我不认为基准测试工具会起作用,因为它无法初始化模型所依赖的变量。