Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/125.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在C(+;+;)API中为小输入实现Tensorflow Python model()?_Python_C++_Performance_Tensorflow - Fatal编程技术网

如何在C(+;+;)API中为小输入实现Tensorflow Python model()?

如何在C(+;+;)API中为小输入实现Tensorflow Python model()?,python,c++,performance,tensorflow,Python,C++,Performance,Tensorflow,问题 我有一个以SavedModel格式保存的(非常)小而快速的模型,我可以使用以下代码加载和运行该模型: model = tf.keras.models.load_model("./<SavedModelDir>") outputs = model(inputs, training=False) model=tf.keras.models.load\u model(“./”) 输出=模型(输入,培训=假) predict功能在0.05秒内运行,一批5个输入(

问题

我有一个以SavedModel格式保存的(非常)小而快速的模型,我可以使用以下代码加载和运行该模型:

model = tf.keras.models.load_model("./<SavedModelDir>")
outputs = model(inputs, training=False)
model=tf.keras.models.load\u model(“./”)
输出=模型(输入,培训=假)
predict功能在0.05秒内运行,一批5个输入(在Nvidia GPU上)。 但是,如果我使用
model.predict\u on_batch(inputs)
model.predict(inputs)
则5个批次的性能会显著下降到0.65-0.80秒。这与说明使用
model()

我遇到的问题是,我试图将我的模型移植到一个C++程序。对C api使用
TF_SessionRun()
model_bundle.GetSession()->Run()
我获得了类似于“慢”Python推理方法的性能

我尝试过的

另一个(非常)小批量的模型,结果相同

我尝试使用
tf.config.optimizer.set_experimental_options({'disable_meta_optimizer':False})禁用优化,以确保这不会对性能产生负面影响,但这会使事情变得更慢

我还尝试将SavedModel转换为TensorRT SavedModel。这进一步增加了 Meod()(Ay-Calthyx)< /C>方法的性能,但是所有其他方法都停止在Python中,在下载的预编译的TysFraceC GPAPI(2.5.0)中,并且用TysFraceFraceCC编译的C++ API对操作未被发现(TunSRRT似乎不起作用)产生错误。 给出的所有性能数据都是在几次热身后运行的。 使用Tensorflow profiler和Python的time.time来衡量性能

通过检查输出,我检查了
model()(\uuuu call\uuuu)
是否正常工作

我的问题

有没有办法通过Tensorflow C(++)API获得
model()


问题似乎出现在针对较大批量的Tensorflows优化中的某个地方,这会降低较小批量的性能。是否有另一个API允许对小批量的快速推断(TunSurr+C++ API?)?< P> > P>我想我是通过为我尝试的其他事情做下面的事情而意外地得出的:
tf.compat.v1.disable_v2_behavior()
位于脚本顶部。然后在获得输出后立即打印(len(outputs))
。这会产生以下错误:
TypeError:len没有很好地定义符号张量。

通过谷歌搜索,我发现符号张量是不直接包含值的张量,因此值可能会在以后填充

这意味着
Model()。可以通过在打印/使用每个输出后停止时间或仅使用
predict()
方法来“修复”此问题