Keras в CoreML: порядок измерений изменился? - PullRequest
0 голосов
/ 24 сентября 2018

Я сделал тестовую модель Python Keras и преобразовал ее в модель Cormel, используя coremltools.Но размерность входа и выхода изменилась.Почему это происходит?

Вот test.py (входная форма = (2,3,4), выходная форма = (4,3,2))

from keras.layers import Input, Reshape, Flatten
import keras.backend as K
import numpy as np

def test():
    global shape_val
    x = Input(shape=(2,3,4), name='x')
    y = Reshape((4,3,2))(x)
    model = Model(x, y)
    model.summary()
    model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])
    model.save('test.h5')

    test_input = np.array(np.arange(0, 24)).reshape((2,3,4))
    pred = model.predict(np.array([test_input]))
    print(pred.shape, pred)

if __name__ == '__main__':
    test()

А вотis convert.py

import coremltools
from keras.models import load_model
from coremltools.proto import NeuralNetwork_pb2

def convert():
    model = load_model('test.h5')

    # convert keras model to coreml model
    coreml_model = coremltools.converters.keras.convert(
        model,
        input_names=['x'],
        output_names=['y'],
    )
    coreml_model.save('test.mlmodel')

    # full precision(float) --> half precision(fp16)
    coreml_model_fp16_spec = coremltools.utils.convert_neural_network_weights_to_fp16(coreml_model)
    coreml_model_fp16_spec.save('test_fp16.mlmodel')

if __name__ == '__main__':
    convert()

В Xcode я получаю этот экран.(входная форма = (4,2,3) выходная форма = (2,4,3))

XCode test.mlmodel

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