Swift 机器学习:功能与局限

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

Swift 在机器学习中的能力与局限性



机器学习领域传统上与 Python 及其库(TensorFlow、PyTorch、scikit-learn)紧密相关。然而,苹果生态系统中的开发者越来越多地提出疑问:Swift 能否用于机器学习任务?Swift 是一种强大、快速且安全的语言,是 iOS、macOS、watchOS 和 tvOS 所有现代应用程序的基础。在本文中,我们将详细探讨 Swift 在机器学习领域可用的工具、它们的优势,以及相对于 Python 还有哪些不足之处。



我们将审视苹果原生框架(Create ML、Core ML)以及第三方解决方案(Swift for TensorFlow)。您将了解 Swift 是否适用于生产级模型、训练神经网络,还是仅适用于设备端的推理。



1. 苹果原生工具:Create ML 与 Core ML



苹果正在积极发展自己的机器学习生态系统。主要框架 —— Create ML 和 Core ML —— 完全由 Swift 编写,并针对在苹果设备上运行进行了优化。



Create ML —— 无需 Python 即可训练模型



Create ML 是一个框架,允许您直接在 macOS 上仅使用 Swift 训练机器学习模型。它非常适合图像分类、文本分析、回归和推荐系统等任务。主要优势在于入门门槛极低:无需安装 Python、配置 CUDA,或深入研究复杂的数学抽象概念。



代码示例:在 Swift 中训练文本分类器



import CreateMLimport Foundation

// Loading data from JSONlet data = try MLDataTable(contentsOf: URL(fileURLWithPath: "reviews.json"))

// Splitting into training and testing setslet (trainingData, testingData) = data.randomSplit(by: 0.8, seed: 5)

// Creating and training the modellet sentimentClassifier = try MLTextClassifier(trainingData: trainingData, textColumn: "text", labelColumn: "label")

// Evaluating accuracylet evaluationMetrics = sentimentClassifier.evaluation(on: testingData)print("Accuracy: \\(evaluationMetrics.classificationError)")

// Saving the model to .mlmodellet metadata = MLModelMetadata(author: "PythonLib User", shortDescription: "Model for sentiment analysis", version: "1.0")try sentimentClassifier.write(to: URL(fileURLWithPath: "SentimentClassifier.mlmodel"), metadata: metadata)


这段代码在带有标签的评论数据上训练了一个模型,并将其保存为 .mlmodel 格式,随后可被集成到任何 iOS/macOS 应用程序中。



Core ML —— 设备端推理



Core ML 是在苹果设备上运行机器学习模型的引擎。它支持 Create ML 训练的模型,也支持来自 TensorFlow 或 PyTorch(通过转换为 .mlpackage 格式)的模型。Core ML 利用硬件加速(神经网络引擎、GPU、CPU),使模型能够在离线状态下工作,无需网络延迟。



示例:在应用中使用预训练的 Core ML 模型



import CoreMLimport Vision

// Loading the modelguard let model = try? VNCoreMLModel(for: ResNet50(configuration: MLModelConfiguration()).model) else { fatalError("Failed to load model")}

// Creating the requestlet request = VNCoreMLRequest(model: model) { request, error in guard let results = request.results as? [VNClassificationObservation], let topResult = results.first else { return } print("Recognized: \\(topResult.identifier) with confidence \\(topResult.confidence)")}

// Performing on the imagelet handler = VNImageRequestHandler(url: URL(fileURL

博客

书籍推荐