【发布时间】:2020-05-08 09:50:10
【问题描述】:
我正在尝试为我正在开发的 iOS 应用程序制作模型。我使用 Keras 训练它。然后使用 coremltools 将其转换为 CoreML。
在训练时,它知道我有两个班级:猫和狗。
它训练得很好。之后,我将其转换并将 class_labels 作为列表传递:["cat", "dog"]。在应用程序中它不起作用。
显示错误:"The VNCoreMLTransform request failed"。如果我只留下一个class_label,它可以正常工作并且也可以分类。
我正在试图找出我做错了什么。
Keras:
img_width, img_height = 224, 224
train_data_dir = 'data/train'
validation_data_dir = 'data/validate'
nb_train_samples = 1000
nb_validation_samples = 20
epochs = 10
batch_size = 10
if K.image_data_format() == 'channels_first':
input_shape = (3, img_width, img_height)
else:
input_shape = (img_width, img_height, 3)
model = Sequential()
model.add(Conv2D(32, (2, 2), input_shape = input_shape))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size =(2, 2)))
model.add(Conv2D(32, (2, 2)))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size =(2, 2)))
model.add(Conv2D(64, (2, 2)))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size =(2, 2)))
model.add(Flatten())
model.add(Dense(64))
model.add(Activation('relu'))
model.add(Dropout(0.5))
model.add(Dense(1))
model.add(Activation('sigmoid'))
model.compile(loss = 'binary_crossentropy',
optimizer = 'rmsprop',
metrics = ['accuracy'])
train_datagen = ImageDataGenerator(
rescale = 1. / 255,
shear_range = 0.2,
zoom_range = 0.2,
horizontal_flip = True)
test_datagen = ImageDataGenerator(rescale = 1. / 255)
train_generator = train_datagen.flow_from_directory(train_data_dir,
target_size =(img_width, img_height),
batch_size = batch_size, class_mode ='binary')
validation_generator = test_datagen.flow_from_directory(
validation_data_dir,
target_size =(img_width, img_height),
batch_size = batch_size, class_mode ='binary')
model.fit_generator(train_generator,
steps_per_epoch = nb_train_samples // batch_size,
epochs = epochs, validation_data = validation_generator,
validation_steps = nb_validation_samples // batch_size)
model.save('model_saved.h5')
转换器:
converted_model = coremltools.converters.keras.convert('model_saved.h5',
input_names = 'image',
image_input_names = 'image',
output_names=['classLabelProbs'],
class_labels = ['cat', 'dog'])
#converted_model = coremltools.converters.keras.convert("model.h5")
converted_model.save('myModel.mlmodel')
【问题讨论】:
标签: python tensorflow keras coreml coremltools