Выбор нескольких .mlModel в Swift - PullRequest
1 голос
/ 30 апреля 2020

У меня есть несколько .mlModels в моем проекте xcode, и я хочу, чтобы пользователь выбрал модель и выполнил прогноз

let gestureClassifier = GestureClassifier() //mlModel

func predictGesture(window: Int) {

    let previousOutput = modelOutputs[window]
       let modelOutput = try? gestureClassifier.prediction(features: modelInput, hiddenIn: previousOutput?.hiddenOut, cellIn: previousOutput?.cellOut)
       modelOutputs[window] = modelOutput

       if let prediction = modelOutput?.activity,
          let probability = modelOutput?.activityProbability[prediction] {
         if prediction == Config.restItValue {
           return
         }
         if probability > Config.predictionThreshold {
            if prediction == Config.chopItValue || prediction == Config.driveItValue || prediction == Config.shakeItValue {
               print("prediction: \(prediction)")
                self.recordGestures(gesture: prediction)
           }

         }
         else{

            print("unrecognised gesture")
            self.recordGestures(gesture: "unRecognised Gesture")
        }
       }
     }

У меня есть другая модель gestClassifier1, я хотел бы сделать что-то подобное

func predictGesture(window: Int, **selectedModel**) {

      let previousOutput = modelOutputs[window]
       let modelOutput = try? **selectedModel**.prediction(features: modelInput, hiddenIn: 
   previousOutput?.hiddenOut, cellIn: previousOutput?.cellOut)

    }

Как мне этого добиться, я пытался использовать Anyclass в качестве типа данных, но функции класса, такие как .prediction (..), недоступны.

1 Ответ

0 голосов
/ 01 мая 2020

Это не столько вопрос Core ML, сколько общий вопрос программирования: как создать функцию, которая принимает объекты разных типов, но обрабатывает их одинаково?

Один из способов сделать это создать протокол, содержащий метод prediction(), а затем создать расширение для каждого из ваших классов GestureClassifier et c, чтобы они соответствовали протоколу.

Другой способ заключается в использовании MLModel из свойства GestureClassifier .model и используйте его.

...