Coremltools使用Keras将Tensorflow模型转换为Core ML的问题

时间:2018-07-02 16:27:27

标签: python tensorflow keras coreml coremltools

我正在训练一个小模型,然后尝试使用

将其导出到core ml
coreml_model = coremltools.converters.keras.convert(model)

但是我遇到一个错误:

  

AttributeError:模块'keras.engine'没有属性'topology'

在进行一些谷歌搜索后,有人建议不推荐使用拓扑结构或类似的东西,并建议将topology替换为saving。我可能做错了,但是我打开了

~/.virtualenvs/tensorflow/lib/python3.6/site-packages/coremltools/converters/keras/_keras_converter.py

,在_KERAS_LAYER_REGISTRY中,我尝试更改

_keras.engine.topology.InputLayer:_layers2.default_skip,

_keras.engine.saving.InputLayer:_layers2.default_skip,

这给了我一个稍微不同的错误:

  

AttributeError:模块'keras.engine.saving'没有属性'InputLayer'

我在这里感觉就像一条没水的鱼,因为我以前从未使用过Tensorflow或核心ML。所以要对我温柔。这是一些代码:

batch_size = 20
epochs = 10
test_size = 500
input_dim = 30

# Model Architecture
model = Sequential()

# Convolutional Layer
model.add(Conv1D(filters=10, kernel_size=5, input_shape=(input_dim, 1)))
model.add(Flatten())

# Dense Layer
model.add(Dense(input_dim, activation='relu'))

# Logits Layer
model.add(Dense(2, activation='softmax'))

rmsprop = optimizers.RMSprop(lr=0.001, rho=0.9, epsilon=1e-08, decay=0.0)
sgd = optimizers.SGD(lr=0.01, decay=1e-6, momentum=0.9, nesterov=True)
model.compile(optimizer=rmsprop,
    loss='binary_crossentropy',
    metrics=['accuracy'],
)

model.fit(x=x_train, y=y_train, batch_size=batch_size, epochs=epochs)

accuracy = model.evaluate(x=x_test, y=y_test, batch_size=batch_size)

print("Overall accuracy: {}".format(accuracy[1]))

coreml_model = coremltools.converters.keras.convert(model)
coreml_model.save('my_model.mlmodel')

0 个答案:

没有答案