Значение Keras для CoreML arror: list.remove (x): x отсутствует в списке - PullRequest
0 голосов
/ 10 октября 2018

Я пытаюсь конвертировать мою модель Keras (mobilenet + dence layer).Проблема в том, что когда я хочу использовать coremltools для преобразования, я столкнулся со следующей проблемой:

Traceback (most recent call last):
File "/usr/local/lib/python3.6/dist-
packages/IPython/core/interactiveshell.py", line 3265, in run_code
    exec(code_obj, self.user_global_ns, self.user_ns)
  File "<ipython-input-4-7905693382e5>", line 1, in <module>
    coreml_model = coremltools.converters.keras.convert(loaded_model)
  File "/usr/local/lib/python3.6/dist-packages/coremltools/converters/keras/_keras_converter.py", line 752, in convert
    custom_conversion_functions=custom_conversion_functions)
  File "/usr/local/lib/python3.6/dist-packages/coremltools/converters/keras/_keras_converter.py", line 550, in convertToSpec
    custom_objects=custom_objects)
  File "/usr/local/lib/python3.6/dist-packages/coremltools/converters/keras/_keras2_converter.py", line 206, in _convert
    graph.build()
  File "/usr/local/lib/python3.6/dist-packages/coremltools/converters/keras/_topology2.py", line 687, in build
    self._remove_old_edges(layer)
  File "/usr/local/lib/python3.6/dist-packages/coremltools/converters/keras/_topology2.py", line 429, in _remove_old_edges
    self._remove_edge(layer, succ)
  File "/usr/local/lib/python3.6/dist-packages/coremltools/converters/keras/_topology2.py", line 365, in _remove_edge
    self.edge_map[src].remove(snk)
ValueError: list.remove(x): x not in list

Я пытаюсь выполнить это преобразование с помощью следующего кода:

js_file = open(args.ddir + args.mdl +'.json','r')
loaded_json_model = js_file.read()
js_file.close()

from keras.applications import mobilenet
from keras.utils.generic_utils import CustomObjectScope
from keras.models import model_from_json

with CustomObjectScope({'relu6': mobilenet.mobilenet.relu6}):
    loaded_model = model_from_json(loaded_json_model)
    loaded_model.load_weights(args.ddir + args.mdl + '.h5')

coreml_model = coremltools.converters.keras.convert(loaded_model,
                                                    input_names="image",
                                                    image_input_names="image"
                                                    )

1 Ответ

0 голосов
/ 21 ноября 2018

Я решил проблему, используя правильную версию Keras, которая включает в себя как Mobilenet (средство извлечения функций), так и одновременно «relu6».Единственная версия (до сих пор), которая работала для меня, это версия "2.1.6".По этой версии я успешно сделал преобразование.coremltools на данный момент не поддерживает некоторые слои (включая relu6).Эта проблема может быть решена с помощью «CustomObjectScope» и показана в предоставленном коде.Обратите внимание, что сеть должна быть обучена в этой версии (2.1.6) снова.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...