[Python, Xcode, Swift, Машинное обучение] Запускаем модель машинного обучения на iPhone (перевод)

Автор Сообщение
news_bot ®

Стаж: 6 лет 9 месяцев
Сообщений: 27286

Создавать темы news_bot ® написал(а)
18-Апр-2021 21:32


Чего уж только на Хабре не было, и DOOM на осциллографе, тесте на беременности и калькуляторе запускали, даже сервер Minecraft на зеркалке Canon 200D поднимали. Сегодня же, специально к старту нового потока курса по Machine Learning и углубленного Machine Learning и Deep Learning, попробуем описать кратчайший путь от обучения модели машинного обучения на Python до доказательства концепции iOS-приложения, которое можно развернуть на iPhone. Цель статьи — дать базовый скаффолдинг, оставляя место для дальнейшей настройки, подходящей для конкретного случая использования.Для простоты мы пропустим некоторые задачи, такие как проверка модели и создание полностью отшлифованного пользовательского интерфейса (UI). К концу этого туториала у вас будет обученная модель, работающая на iOS, которую вы сможете продемонстрировать как прототип и загрузить на своё устройство.Шаг 1. Настройка среды Во-первых, давайте создадим виртуальную среду Python под названием .core_ml_demo, а затем установим необходимые библиотеки: pandas, scikit-learn и coremltools. Чтобы создать виртуальную среду, выполните в терминале эти команды:
python3 -m venv ~/.core_ml_demo
source  ~/.core_ml_demo/bin/activate
python3 -m pip install \
pandas==1.1.1 \
scikit-learn==0.19.2 \
coremltools==4.0
Далее установим Xcode. XCode — это инструментарий разработки для продуктов Apple. Обратите внимание, что Xcode довольно большой (больше 10 ГБ). Я бы порекомендовал выпить чашку кофе или запустить установку на ночь. 
Примечание: в этом туториале используется Xcode 12.3 (12C33) на MacOS Catalina 10.15.5.
Шаг 2. Обучение моделиМы будем использовать набор данных Boston Housing Price от scikit-learn для обучения модели линейной регрессии и прогнозирования цен на жильё на основе свойств и социально-экономических атрибутов. Поскольку мы стремимся к простоте, ограничим пространство признаков тремя предикторами и как целевую переменную будем использовать цену дома.
import pandas as pd
from sklearn.linear_model import LinearRegression
from sklearn.datasets import load_boston
# Load data
boston = load_boston()
boston_df = pd.DataFrame(boston["data"])
boston_df.columns = boston["feature_names"]
boston_df["PRICE"]= boston["target"]
y = boston_df["PRICE"]
X = boston_df.loc[:,["RM", "AGE", "PTRATIO"]]
# Train a model
lm = LinearRegression()
lm.fit(X, y)
Шаг 3. Преобразование модели в Core MLApple предоставляет два способа разработки моделей для iOS. Первый, Create ML, позволяет создавать модели полностью в рамках экосистемы Apple. Второй, Core ML, позволяет интегрировать модели от третьих лиц в платформу Apple, преобразовав их в формат Core ML. Поскольку мы заинтересованы в запуске обученной модели на iOS, воспользуемся вторым способом.Перед импортом в Xcode мы преобразуем нашу модель sklearn в формат Core ML (.mlmodel) с помощью пакета python coremltool; coremltools позволяет назначать метаданные объекту модели, такие как информация об авторстве, описание функций модели и результатов.
# Convert sklearn model to CoreML
import coremltools as cml
model = cml.converters.sklearn. \
convert(lm,
        ["RM", "AGE", "PTRATIO"],
        "PRICE")
# Assign model metadata
model.author = "Medium Author"
model.license = "MIT"
model.short_description = \
"Predicts house price in Boston"
# Assign feature descriptions
model.input_description["RM"] = \
"Number of bedrooms"
model.input_description["AGE"] = \
"Proportion of units built pre 1940"
model.input_description["PTRATIO"] = \
"Pupil-teacher ratio by town"
# Assign the output description
model.output_description["PRICE"] = \
"Median Value in 1k (USD)"
# Save model
model.save('bhousing.mlmodel')
Шаг 4. Создание нового проекта в XcodeС Python мы закончили. Теперь можно завершить прототип приложения при помощи только Xcode и Swift. Это можно сделать так:
  • Откройте Xcode и создайте новый проект.
  • Выберите «iOS» как тип мультиплатформы.
  • Выберите тип приложения «App».

Создание нового проекта Xcode для iOS4. Дайте проекту название и выберите интерфейс «SwiftUI».
Конфигурация проектаТеперь просто перетащите созданный на третьем шаге файл модели .ml в каталог Xcode. Xcode автоматически сгенерирует класс Swift для вашей модели, как показано в редакторе ниже. Если вы посмотрите на класс, то заметите, что он содержит детали, которые мы ввели при сохранении нашей модели на Python с помощью coremltools, такие как описания объектов и целевых полей. Это удобно при управлении моделью.
Импорт файла .coreml в проект XcodeШаг 5. Создание UI модели Далее создадим базовый пользовательский интерфейс, изменив файл contentView.swift. Приведённый ниже код на Swift отображает пользовательский интерфейс, который позволяет пользователям настраивать атрибуты дома, а затем прогнозировать его цену. Есть несколько элементов, которые мы можем здесь рассмотреть.NavigationView содержит необходимый пользовательский интерфейс. Он включает:
  • Степпер (строки 19–30) для каждой из наших трёх функций, который позволяет пользователям изменять значения функций. Степперы — это в основном виджеты, которые изменяют @State атрибутных переменных нашего дома (строки 6–8).
  • Кнопку на панели навигации (строки 31–40) для вызова нашей модели из функции predictPrice (строка 46). На экране появится предупреждающее сообщение с прогнозируемой ценой.
За пределами NavigationView у нас есть функция predictPrice (строки 46–62). Она создаёт экземпляр класса Swift Core ML model и генерирует прогноз в соответствии с хранящимися в состояниях объектов значениями.
import SwiftUI
import CoreML
import Foundation
struct ContentView: View {
  @State private var rm = 6.5
  @State private var age = 84.0
  @State private var ptratio = 16.5
  @State private var alertTitle = ""
  @State private var alertMessage = ""
  @State private var showingAlert = false
  var body: some View {
      NavigationView {
        VStack {
        Text("House Attributes")
            .font(.title)
        Stepper(value: $rm, in: 1...10,
                step: 0.5) {
            Text("Rooms: \(rm)")
          }
          Stepper(value: $age, in: 1...100,
              step: 0.5) {
          Text("Age: \(age)")
          }
          Stepper(value: $ptratio, in: 12...22,
              step: 0.5) {
          Text("Pupil-teacher ratio: \(ptratio)")
          }
          .navigationBarTitle("Price Predictor")
          .navigationBarItems(trailing:
              Button(action: predictPrice) {
                  Text("Predict Price")
              }
          )
          .alert(isPresented: $showingAlert) {
              Alert(title: Text(alertTitle),
                    message: Text(alertMessage),
              dismissButton: .default(Text("OK")))
          }
        }
      }
  }
func predictPrice() {
    let model = bhousing()
    do { let p = try
      model.prediction(
          RM: Double(rm),
          AGE: Double(age),
          PTRATIO: Double(ptratio))
        alertMessage = "$\(String((p.PRICE * 1000)))"
      alertTitle = "The predicted price is:"
  } catch {
    alertTitle = "Error"
    alertMessage = "Please retry."
  }
    showingAlert = true
}
}
struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}
И, наконец, самое интересное: мы можем создать и запустить симуляцию приложения в Xcode, чтобы увидеть нашу модель в действии. В приведённом ниже примере я создал симуляцию с помощью iPhone 12.
Симуляция модели работает на iOS.ЗаключениеИ это всё. Первый прототип завершён. Здесь есть что добавить, например валидацию модели, тесты для подтверждения ожидаемой производительности после импорта в iOS и более гладкий/дружественный пользовательский интерфейс. Тем не менее я надеюсь, что статья послужит полезным справочником по развёртыванию машинного обучения на мобильном устройстве.Новые и усовершенствованные инструменты продолжают делать поиски в мобильной разработке более доступными для сообщества Data Science, и в мобильном мире есть большое пространство для творчества. Поскольку мобильная техника мультимедийная по своей сути, она даёт богатство типов данных (например, аудио, видео, движение и местоположение) наряду с уникальными вариантами применения приложений для расширения инструментария Data Science.Если вы кодите на Python и столкнулись в работе с задачами машинного обучения — обратите внимание на наш курс Machine Learning, на котором вы сможете систематизировать и углубить полученные самостоятельно знания, пообщаться с профессионалами и применить модели Machine Learning на практике. Даже можно будет ворваться на хакатоны Kaggle.
Если же есть намерение сменить сферу деятельности и погрузиться в ML более плотно — то можно посмотреть на продвинутый курс Machine Learning и Deep Learning, на котором вы освоите основные алгоритмы машинного обучения, обучите рекомендательную систему и создадите несколько нейронных сетей.
Узнайте, как прокачаться и в других специальностях или освоить их с нуля: Другие профессии и курсыПРОФЕССИИ КУРСЫ
===========
Источник:
habr.com
===========

===========
Автор оригинала: Patrick Long
===========
Похожие новости: Теги для поиска: #_python, #_xcode, #_swift, #_mashinnoe_obuchenie (Машинное обучение), #_skillfactory, #_mashinnoe+obuchenie (машинное+обучение), #_swift, #_python, #_xcode, #_coreml, #_pandas, #_coremltools, #_sklearn, #_ui, #_blog_kompanii_skillfactory (
Блог компании SkillFactory
)
, #_python, #_xcode, #_swift, #_mashinnoe_obuchenie (
Машинное обучение
)
Профиль  ЛС 
Показать сообщения:     

Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы

Текущее время: 24-Ноя 23:18
Часовой пояс: UTC + 5