之前翻译了一篇关于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})
网友评论