AttributeError: 'module' object has no attribute ' SeparableConv1D' while converting Keras to Core ML Model

AttributeError: 'module' object has no attribute ' SeparableConv1D' while converting Keras to Core ML Model

我正在关注有关使用 Keras 和 CoreML 进行机器学习的 tutorial,当我谈到 运行 以下代码并将 Keras 模型转换为 CoreML 时。我得到:

AttributeError: 'module' object has no attribute 'SeparableConv1D'

我应该更改哪里才能解决这个问题?

这是我的代码 运行:

output_labels = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']

coreml_mnist = coremltools.converters.keras.convert(
    'best_model.09-0.03.h5', input_names=['image'], output_names=['output'], 
    class_labels=output_labels, image_input_names='image')

这是我得到的详细信息:

AttributeError                            Traceback (most recent call last)
<ipython-input-73-8fa50f6bbeb9> in <module>()
     10 coreml_mnist = coremltools.converters.keras.convert(
     11     'best_model.08-0.03.h5', input_names=['image'], output_names=['output'],
---> 12     class_labels=output_labels, image_input_names='image')

/usr/local/lib/python2.7/dist-packages/coremltools/converters/keras/_keras_converter.pyc in convert(model, input_names, output_names, image_input_names, input_name_shape_dict, is_bgr, red_bias, green_bias, blue_bias, gray_bias, image_scale, class_labels, predicted_feature_name, model_precision, predicted_probabilities_output, add_custom_layers, custom_conversion_functions)
    758                       predicted_probabilities_output,
    759                       add_custom_layers,
--> 760                       custom_conversion_functions=custom_conversion_functions)
    761 
    762     return _MLModel(spec)

/usr/local/lib/python2.7/dist-packages/coremltools/converters/keras/_keras_converter.pyc in convertToSpec(model, input_names, output_names, image_input_names, input_name_shape_dict, is_bgr, red_bias, green_bias, blue_bias, gray_bias, image_scale, class_labels, predicted_feature_name, model_precision, predicted_probabilities_output, add_custom_layers, custom_conversion_functions, custom_objects)
    554                                            add_custom_layers=add_custom_layers,
    555                                            custom_conversion_functions=custom_conversion_functions,
--> 556                                            custom_objects=custom_objects)
    557     else:
    558         raise RuntimeError(

/usr/local/lib/python2.7/dist-packages/coremltools/converters/keras/_keras2_converter.pyc in _convert(model, input_names, output_names, image_input_names, input_name_shape_dict, is_bgr, red_bias, green_bias, blue_bias, gray_bias, image_scale, class_labels, predicted_feature_name, predicted_probabilities_output, add_custom_layers, custom_conversion_functions, custom_objects)
    207     # Build network graph to represent Keras model
    208     graph = _topology2.NetGraph(model)
--> 209     graph.build()
    210 
    211     # The graph should be finalized before executing this

/usr/local/lib/python2.7/dist-packages/coremltools/converters/keras/_topology2.pyc in build(self, is_top_level)
    748             self.insert_1d_permute_layers()
    749             self.insert_permute_for_spatial_bn()
--> 750             self.defuse_activation()
    751             self.remove_internal_input_layers()
    752 

/usr/local/lib/python2.7/dist-packages/coremltools/converters/keras/_topology2.pyc in defuse_activation(self)
    508                 isinstance(k_layer, _keras.layers.Conv1D) or
    509                 isinstance(k_layer, _keras.layers.SeparableConv2D) or
--> 510                 isinstance(k_layer, _keras.layers.SeparableConv1D) or
    511                 isinstance(k_layer, _keras.layers.Dense)):
    512 

AttributeError: 'module' object has no attribute 'SeparableConv1D'

似乎您使用的 keras 版本不受 coremltools 支持,因为 SeparableConv1D 是在 keras 2.0.6 之后添加的,您应该将 keras 升级到最新版本为了这个工作。

我在使用 this tutorial 时遇到了同样的问题,正如其他人提到的 keras 版本不支持 SeparableConv1D

但是,只更新 keras 的版本而不更新 tensorflow 会导致 jupyter notebook 出现其他错误。我能够使用 sys 模块在 jupyter notebook 中直接安装 kerastensorflow 的兼容版本。在撰写本文时,keras 的最新版本是 2.2.4,tensorflow 的一个兼容版本(至少针对本教程进行了测试)是 1.7.0。

您可以运行以下python代码进行安装:

import sys
!{sys.executable} -m pip install tensorflow==1.7.0
!{sys.executable} -m pip install keras==2.2.4