Машинное обучение на Swift: библиотеки для iOS/macOS
Swift — мощный и интуитивный язык от Apple, который активно используется не только для разработки приложений под iOS и macOS, но и для задач машинного обучения. Благодаря производительности, безопасности типов и прямой интеграции с фреймворками Apple, Swift становится отличным выбором для внедрения ML-моделей на устройствах. В этой статье мы рассмотрим ключевые библиотеки и инструменты для машинного обучения на Swift, которые помогут вам создавать умные приложения для экосистемы Apple.
1. Core ML — флагманский фреймворк Apple
Core ML — это основной фреймворк от Apple для интеграции моделей машинного обучения в приложения. Он поддерживает большое количество форматов моделей (MLModel, ONNX, TensorFlow, PyTorch) и оптимизирован для работы на устройствах (iPhone, iPad, Mac). Core ML автоматически использует Neural Engine, GPU и CPU для максимальной производительности.
Пример: Классификация изображений с Core ML
import CoreML
import Vision
// Загружаем предобученную модель MobileNetV2
guard let model = try? VNCoreMLModel(for: MobileNetV2(configuration: MLModelConfiguration()).model) else {
fatalError("Не удалось загрузить модель")
}
// Создаем запрос
let request = VNCoreMLRequest(model: model) { request, error in
guard let results = request.results as? [VNClassificationObservation],
let topResult = results.first else {
print("Не удалось классифицировать")
return
}
print("Объект: \(topResult.identifier) с уверенностью \(topResult.confidence)")
}
// Загружаем изображение
guard let image = UIImage(named: "cat.jpg"),
let ciImage = CIImage(image: image) else { return }
let handler = VNImageRequestHandler(ciImage: ciImage, options: [:])
try? handler.perform([request])
2. Create ML — обучение без кода (и с кодом)
Create ML — инструмент от Apple для обучения моделей машинного обучения прямо в Xcode. Он поддерживает задачи классификации изображений, текста, табличных данных, рекомендательные системы и даже звуковые классификаторы. Модели, обученные в Create ML, автоматически экспортируются в формат .mlmodel и готовы к использованию с Core ML.
Пример: Обучение модели классификации текста
import CreateML
// Загружаем данные из CSV
let data = try MLDataTable(contentsOf: URL(fileURLWithPath: "/path/to/data.csv"))
// Разделяем на обучающую и тестовую выборки
let (trainingData, testingData) = data.randomSplit(by: 0.8, seed: 42)
// Создаем классификатор текста
let classifier = try MLTextClassifier(trainingData: trainingData, textColumn: "text", labelColumn: "label")
// Оцениваем точность
let evaluationMetrics = classifier.evaluation(on: testingData)
print("Точность: \(evaluationMetrics.classificationError)")
// Сохраняем модель
let metadata = MLModelMetadata(author: "PythonLib", shortDescription: "Классификатор отзывов", version: "1.0")
try classifier.write(to: URL(fileURLWithPath: "/path/to/SentimentClassifier.mlmodel"), metadata: metadata)
3. TensorFlow Lite (TFLite Swift) — мобильный TensorFlow
TensorFlow Lite — это облегченная версия TensorFlow для мобильных и встраиваемых устройств. Swift-интерфейс позволяет загружать и выполнять модели TFLite на iOS и macOS. TFLite поддерживает аппаратное ускорение через Metal Performance Shaders (MPS) и Core ML делегаты.
Пример: Запуск модели TFLite
import TensorFlowLite
// Загружаем модель
guard let modelPath = Bundle.main.path(forResource: "mobilenet_v1_1.0_224", ofType: "tflite") else {
fatalError("Модель не найдена")
}
let interpreter = try Interpreter(modelPath: modelPath)
try interpreter.allocateTensors()
// Подготавливаем входные данные (например, изображение 224x224)
let inputData: Data = preprocessImage(image) // ваша функция препроцессинга
try interpreter.copy(inputData, toInputAt: 0)
// Выполняем инференс
try interpreter.invoke()
// Получаем результаты
let outputTensor = try interpreter.output(at: 0)
let probabilities = outputTensor.data.toArray(type: Float32.self)
let topIndex = probabilities.argmax()
print("Предсказанный класс: \(topIndex)")
4. Bender — нейросети на GPU
Bender — это библиотека для построения и выполнения нейронных сетей на GPU с использованием Metal Performance Shaders. Она предоставляет высокоуровневый API для создания слоев (сверточные, полносвязные, пулинг, нормализация) и оптимизирована для реального времени. Bender идеально подходит для задач компьютерного зрения и обработки видео.
Пример: Создание простой сети
import Bender
// Создаем граф сети
let network = Network(device: device)
// Добавляем слои
network.add