提问者:小点点

Tensorflow tf.abs() 替代,可以转换为 TensorRT


我正试图将我的Tensorflow冻结模型转换为NVIDIA TensorRT引擎。我有TensorRT 3版本。TensorRT不支持某些Tensorflow层/函数,如< code>tf。Cast,等等。我的模型使用< code>tf.abs()函数(EDIT:它实际上受tensort支持,但不受构建tensort引擎所需的UFF解析器的支持),并且我能够在将tensorflow检查点转换为冻结模型之前更改操作。

我需要将tf.abs()替换为备用。因此,我尝试在Tensorflow中执行以下numpy操作。

Numpy:

mask = (x<0).astype(np.float32)
mask = 2*mask + 1 #(makes all 1s -1, and all 0s 1)
abs_vals = mask*x

Tensorflow:z是零的张量,形状与x相同

mask = tf.less(x, z)
#convert mask from boolean to integer or float

我不确定如何继续,因为我需要将张量流返回的布尔掩码转换为整数掩码,以便将其乘以输入,但 tf。 TensorRT也不支持强制转换操作。

编辑:问题实际上是UFF解析器不支持abs函数,而TensorRT实际上支持它。请在此处添加错误日志。

使用输出节点generate_output/deprocess/add转换为UFF图编号节点:361 UFF输出写入数据/tmp.UFF UFFParser:解析generate_out/generator/encoder_9/lrelu/mul/x UFFParser:解析generate_output/generator/encoder/8/lrelu/mul/x UFFP arser:剖析generate_oUT/generator=encoder_7/lrelu/mul/x UFFParser::解析generate _output/gnerator/encoller_6/lrelu/mul/xUFFParser:解析generate_output/generator/encoder_5/lrelu/mul/x UFFParser:解析generate_output/generator/encoder-4/lrelu-mul/xUFFParser:解析generate-output/生成器/encoder/3/lrelu/mul x UFFParsr:解析generate _output generator/encoder_2/lrelu/mul xgenerate_output/load_images/preprocess/mul UFFParser:解析generate_out/load_iimages/preprocess/sub/y UFFParser:解析generate_output/load _images/preprocess/sub UFFPParser:解析generate_output/input_images/Reshape UFFParsr:解析generate _output/input_iimages/Reshapegenerate_output/generator/enoder_1/conv/Conv2D UFFParser:解析generate_out/generator/emoder_2/lrelu/mul UFFParser:解析generate_output/gnerator/enoder/2/lrelu-mul_1/x UFFPParser:解析generate_output/generator/enoder_2/lrelu/Abs UFFParser:解析器错误:generate_oput/generate/enoder_2/lrelu/Abs:其他非常量节点不支持一元无法解析UFF


共1个答案

匿名用户

不幸的是,截至 2018 年 4 月,UFF 转换不支持很多操作。这个工作,等效于 tf.abs():

abs_val = tf.maximum( 0, x ) + tf.maximum( 0, -x )