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})

你可能感兴趣的:(Core ML中的自定义层续)