Python Tensorflow tf.abs()可转换为TensorRT的替代项
我正在尝试将Tensorflow冻结模型转换为NVIDIA TensorRT引擎。我有TensorRT 3版本。TensorRT不支持某些Tensorflow层/函数,如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
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 )