Python Tensorflow tf.abs()可转换为TensorRT的替代项

Python Tensorflow tf.abs()可转换为TensorRT的替代项,python,tensorflow,nvidia,tensor,tensorrt,Python,Tensorflow,Nvidia,Tensor,Tensorrt,我正在尝试将Tensorflow冻结模型转换为NVIDIA TensorRT引擎。我有TensorRT 3版本。TensorRT不支持某些Tensorflow层/函数,如tf.Cast等。 我的模型使用tf.abs()函数(编辑:实际上TensorRT支持该函数,但构建TensorRT引擎所需的UFF解析器不支持该函数),并且我能够在将tensorflow检查点转换为冻结模型之前更改操作 我需要用替代品替换tf.abs()。因此,我尝试在Tensorflow中执行以下numpy操作 努比: ma

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

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

努比:

mask = (x<0).astype(np.float32)
mask = 2*mask + 1 #(makes all 1s -1, and all 0s 1)
abs_vals = mask*x
我不确定如何继续,因为我需要将tensorflow返回的布尔掩码转换为整数掩码,以便将其与输入相乘,但TensorRT也不支持
tf.Cast
操作

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

使用输出节点生成\ u输出/去处理/添加 转换为UFF图 节点数目:361 UFF输出写入数据/tmp.UFF UFFParser:解析生成\输出/生成器/编码器\ 9/lrelu/mul/x UFFParser:解析生成\输出/生成器/编码器\ 8/lrelu/mul/x UFFParser:解析生成\输出/生成器/编码器\ 7/lrelu/mul/x UFFParser:解析生成\输出/生成器/编码器\ 6/lrelu/mul/x UFFParser:解析生成\输出/生成器/编码器\ 5/lrelu/mul/x UFFParser:解析生成\输出/生成器/编码器\ 4/lrelu/mul/x UFFParser:解析生成\输出/生成器/编码器\ 3/lrelu/mul/x UFFParser:解析生成\输出/生成器/编码器\ 2/lrelu/mul/x UFFParser:解析图像张量 UFFParser:解析生成\输出/加载\图像/预处理/mul/y UFFParser:解析生成\输出/加载\图像/预处理/mul UFFParser:解析生成\输出/加载\图像/预处理/子/y UFFParser:解析生成\输出/加载\图像/预处理/子 UFFParser:解析生成\输出/输入\图像/重塑/形状 UFFParser:解析生成\输出/输入\图像/重塑 UFFParser:解析生成器/编码器_1/conv/filter UFFParser:解析生成\输出/生成器/编码器\ 1/conv/Conv2D UFFParser:解析生成\输出/生成器/编码器\ 2/lrelu/mul UFFParser:解析生成\输出/生成器/编码器\ 2/lrelu/mul\ 1/x UFFParser:解析生成\输出/生成器/编码器\ 2/lrelu/Abs UFFParser:解析器错误:generate_output/generator/encoder_2/lrelu/Abs:其他非常量节点不支持一元数 无法分析UFF


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


对不起,我的错。TensorRT不支持
abs
功能。UFF解析器不支持它(在编辑中提到)。
tf.sqrt
不受UFF支持。您知道支持的UFF操作列表吗?在我的回答中添加了另一个基于
tf.max()
的解决方案谢谢。我没有遇到UFF不支持的层列表。但是使用最大操作的工作非常有效!
mask = tf.less(x, z)
#convert mask from boolean to integer or float
abs_val = tf.maximum( 0, x ) + tf.maximum( 0, -x )