【问题标题】:Implementing SELU activation in TFlite micro在 TFlite micro 中实现 SELU 激活
【发布时间】:2021-02-24 14:58:00
【问题描述】:

我希望能够在 CNN 模型中使用 SELU 激活,以便在使用 TFlite micro 的 MCU 上进行部署。

SELU 只是 ELU 的扩展版本,ELU 是作为 TFLite micro 中的内核之一实现的。

我们基于 /lite/micro/kernels/elu.cc/lite/micro/kernels/elu.h 的副本实现 SELU,如 selu.ccselu.h。 对于int8 操作,SeluEval() 中的计算只是从查找表中返回,该查找表在SeluPrepare() 期间计算和填充

从阅读https://www.tensorflow.org/lite/guide/ops_custom 开始,我仍然不清楚,允许 TFLiteMicro 端口接收我的 SELU 激活需要什么,以及所有 TFLite 框架是否,似乎位于 TFLite micro 之上的它也需要能够将其拾取以成功转换和量化我的模型?

从我在 TFLite 微型端口中可以看到,所有 builtin 操作都在 all_ops_resolver.ccmicro_mutable_op_resolver.h 中注册,在此处添加我的自定义操作可能是一个继续前进的技巧,如果必需品。

有没有人在 TFLite Micro 中成功实现了自定义操作,并且能够为我指明应该如何完成的方向?

或者是否有关于可用流程的其他信息?

【问题讨论】:

    标签: tensorflow machine-learning tensorflow2.0 tensorflow-lite


    【解决方案1】:

    您可以使用MicroMutableOpResolver 将自定义操作添加到 TFLu 运行时。 test code 包含如何做到这一点的最小示例。如果你用它的自定义名称注册 selu,你就可以在你的运行时使用它。

    如果空间允许,您可以使用'AllOpsResolver` 并添加您的自定义操作。

    【讨论】:

    • SELU 具有不同的比例,具体取决于值是高于还是低于 0,由 给出
    • TFLite micro elu 是:return value < 0.0 ? std::exp(value) - 1.0f : value; 为使elu 符合所需的形状,缩放到0以下是不同的,根据def elu(z, alpha=1): return np.where(z < 0, alpha * (np.exp(z) - 1), z) def selu(z, scale=scale_0_1, alpha=alpha_0_1): return scale * elu(z, alpha) 与:a = 1.6732632423543778 b = 1.0507009873554805因此内置的elu 不能被拉伸以适应这个
    • 哦,我明白了。让我编辑答案。
    • 我认为这部分是对的,我已将其添加到 micro_ops.hflatbuffer_conversions.cc。然而,TFLite 中的某些东西似乎仍然缺失 RuntimeError: Failed to initialize op resolver for calibration: There are unresolved custom ops: [Selu]Encountered unresolved custom op: Selu.Node number 1 (Selu) failed to prepare.
    猜你喜欢
    • 2023-03-23
    • 1970-01-01
    • 2018-02-18
    • 2020-07-17
    • 2017-02-19
    • 2012-11-01
    • 2010-09-20
    • 2017-12-14
    • 1970-01-01
    相关资源
    最近更新 更多