Почему разрешенные эпохи, установленные компоновщиком coremltools, игнорируются? - PullRequest
0 голосов
/ 02 декабря 2019

Я создал 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)
            }
        })
...