Я создал NN в keras и преобразовал его для обучения с помощью coremltools .
spec = keras_converter.convert(
model,
input_names=["input"],
output_names=["output"],
respect_trainable=True
).save("EasyMultilayerPerceptron.mlmodel")
Чтобы обучить несколько эпох на iPhone, я использовал конструктор coremltools.
spec = coremltools.utils.load_spec("EasyMultilayerPerceptron.mlmodel")
builder = coremltools.models.neural_network.NeuralNetworkBuilder(spec=spec)
builder.set_epochs(epochs=50, allowed_set=[5, 10, 50, 100, 500, 1000, 5000])
coremltools.utils.save_spec(builder.spec, "XORMultiLayerPerceptron.mlmodel")
print(builder.spec.neuralNetwork.updateParams.epochs)
Журналы команды печати следующие:
defaultValue: 50
set {
values: 1
values: 5
values: 10
values: 50
values: 100
values: 500
values: 1000
values: 5000
}
Интегрировано в мойПроект XCode, модель показывает, что эпохи по умолчанию равны 50. Однако при обучении модели она всегда просто обучает одну отдельную эпоху. При установке MLModelConfiguration
на 50 эпох я получаю сообщение об ошибке, что разрешена только 1 эпоха. Почему, и как я могу это исправить?
modelConfig.parameters = [MLParameterKey.epochs: 50]
let updateTask = try MLUpdateTask(
forModelAt: self.modelURL,
trainingData: trainingBatch,
configuration: modelConfig,
progressHandlers: MLUpdateProgressHandlers(
forEvents: [.trainingBegin,.epochEnd],
progressHandler: { (contextProgress) in
print(contextProgress.event)
}) { (finalContext) in
do {
print("Finished Training in \(time) s")
try finalContext.model.write(to: self.modelURL)
} catch {
print(error)
}
})