Я сделал тестовую модель 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