python - 可转换为 TensorRT 的 Tensorflow tf.abs() 替代方案

标签 python tensorflow nvidia tensor tensorrt

我正在尝试将我的 Tensorflow 卡住模型转换为 NVIDIA TensorRT 引擎。我有 TensorRT 3 版本。 TensorRT 不支持某些 Tensorflow 层/函数,例如 tf.Cast 等。 我的模型使用 tf.abs() 函数(编辑:实际上 TensorRT 支持该函数,但构建 TensorRT 引擎所需的 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

我不确定如何继续,因为我需要将 tensorflow 返回的 bool 掩码转换为整数掩码,以便将其乘以输入,但 tf.Cast 操作也不是由 TensorRT 支持。

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

Using output node generate_output/deprocess/add Converting to UFF graph No. nodes: 361 UFF Output written to data/tmp.uff UFFParser: parsing generate_output/generator/encoder_9/lrelu/mul/x UFFParser: parsing generate_output/generator/encoder_8/lrelu/mul/x UFFParser: parsing generate_output/generator/encoder_7/lrelu/mul/x UFFParser: parsing generate_output/generator/encoder_6/lrelu/mul/x UFFParser: parsing generate_output/generator/encoder_5/lrelu/mul/x UFFParser: parsing generate_output/generator/encoder_4/lrelu/mul/x UFFParser: parsing generate_output/generator/encoder_3/lrelu/mul/x UFFParser: parsing generate_output/generator/encoder_2/lrelu/mul/x UFFParser: parsing image_tensor UFFParser: parsing generate_output/load_images/preprocess/mul/y UFFParser: parsing generate_output/load_images/preprocess/mul UFFParser: parsing generate_output/load_images/preprocess/sub/y UFFParser: parsing generate_output/load_images/preprocess/sub UFFParser: parsing generate_output/input_images/Reshape/shape UFFParser: parsing generate_output/input_images/Reshape UFFParser: parsing generator/encoder_1/conv/filter UFFParser: parsing generate_output/generator/encoder_1/conv/Conv2D UFFParser: parsing generate_output/generator/encoder_2/lrelu/mul UFFParser: parsing generate_output/generator/encoder_2/lrelu/mul_1/x UFFParser: parsing generate_output/generator/encoder_2/lrelu/Abs UFFParser: Parser error: generate_output/generator/encoder_2/lrelu/Abs: Unary not supported for other non-constant node Failed to parse UFF

最佳答案

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

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

关于python - 可转换为 TensorRT 的 Tensorflow tf.abs() 替代方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49856793/

相关文章:

python - x 轴以日期为刻度

python - 预期dense_43_input具有形状(3,)但得到形状为(1,)的数组

python-2.7 - 如何使用pycharm编辑器加载预训练的graph.pb和重新训练的label.text

python - 将TensorFlow Faster R-CNN卡住图转换为Intel OpenVINO框架时发生内部错误

c - 如何在 VS 2010 中使用 Nvidia NSight 查看 CUDA 线程值?

memory - 合理化我的简单 OpenCL 内核中关于全局内存的情况

python - 从一系列图像中找出最大的 x,y 值

python - 在 python 中对列表进行分箱

winapi - main 与 wWinMain

python - 使用 Keras 使用多个指标进行预测