Core ML中的自定义层续

之前翻译了一篇关于Core ML中的自定义层的文章,文章通过一个实例讲述了从在Keras中建立自定义层到最终转换为coremlmodel在ios中运行的全过程。

文中Keras中建立自定义层是通过Lambda层+自定义函数来实现的,这有很多局限性。这篇文章里我将给出在Keras中直接建立自定义层的方法,swift部分代码不变。

Keras自定义层
class Swish(Layer):
    
    def __init__(self, **kwargs):
        super(Swish, self).__init__(**kwargs)
    
    def call(self, x):
        return keras.backend.sigmoid(x) * x

自定义层Swish的输入输出Sharp相同,所以compute_output_shape不用重写,这层没有训练weight,build也不用重写

转换函数
def convert_swish(layer):
    params = coremltools.proto.NeuralNetwork_pb2.CustomLayerParams()
    params.className = "Swish"
    return params
使用coremltools
coreml_model = coremltools.converters.keras.convert(
                                                    model,
                                                    input_names="image",
                                                    image_input_names="image",
                                                    output_names="output",
                                                    add_custom_layers=True,
                                                    custom_conversion_functions={"Swish": convert_swish})
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容