TFLite 的硬刷

ank*_*nki 4 python tensorflow tensorflow-lite tpu

我有一个用 Tensorflow.Keras 编写的自定义神经网络,并应用 hard-swish 函数作为激活(如 MobileNetV3 论文中使用的那样):

$$h-swish = x \cdot \frac{ReLU6(x+3)}{6}$$)。

执行:

def swish(x):
    return x * tf.nn.relu6(x+3) / 6
Run Code Online (Sandbox Code Playgroud)

我正在运行量化感知训练并在最后编写一个 protobuf 文件。然后,我使用此代码转换为 tflite(并最终将其部署在 EdgeTPU 上):

tflite_convert --output_file test.tflite --graph_def_file=test.pb --inference_type=QUANTIZED_UINT8 --input_arrays=input_1 --output_arrays=conv2d_3/Sigmoid --mean_values=0 --std_dev_values=255 --default_ranges_min=0 --default_ranges_max=6
Run Code Online (Sandbox Code Playgroud)

这非常有效,当我不除以 6 时,但是,除以 6 时出现此错误:

Unimplemented: this graph contains an operator of type Div for which the quantized form is not yet implemented.
Run Code Online (Sandbox Code Playgroud)

我使用 TF 1.14 进行训练,昨晚使用 TF 1.15 构建以转换为 TFLITE;我正在努力让 TF 2.x 解决一些奇怪的 HDF5 不兼容问题,但如果有人知道如何规避这个问题,那就太好了……谢谢!

jde*_*esa 7

由于它是一个常数除法,您可以乘以(近似值)倒数:

def swish(x):
    return x * tf.nn.relu6(x+3) * 0.16666667
Run Code Online (Sandbox Code Playgroud)