Swift 机器学习:初学者的功能与限制

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

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

开始课程

引言:为什么选择 Swift 进行机器学习?



机器学习(ML)的世界传统上与 Python、Jupyter Notebooks 以及 TensorFlow 或 PyTorch 等库紧密相连。然而近年来,Swift——苹果公司以其高性能和安全性著称的编程语言——开始登上舞台。如果您是希望将 ML 集成到应用中的 iOS/macOS 开发者,或者正在选择第一个 ML 语言的初学者,那么本文适合您。



Swift 提供了一种独特的方法:它将编译型语言(如 C++)的速度与脚本语言的可读性相结合。得益于 Core ML 和 Create ML 框架,以及 Swift for TensorFlow 项目,Swift 正成为苹果设备上机器学习任务的可行替代方案。然而,这种方法也有其局限性。让我们一探究竟。



Swift 用于 ML 的主要功能



1. Core ML:设备端模型集成



Core ML 是苹果的框架,用于直接在设备(iPhone、iPad、Mac)上运行机器学习模型。这是一个关键优势:数据无需发送到服务器,从而保证了隐私和运行速度。



加载和使用预训练模型(例如用于图像分类的 MobileNet)的示例:



import CoreMLimport Vision

// 加载模型guard let model = try? VNCoreMLModel(for: MobileNetV2().model) else { fatalError("无法加载模型")}

// 创建请求let request = VNCoreMLRequest(model: model) { request, error in guard let results = request.results as? [VNClassificationObservation] else { return } // 输出前三个结果 for result in results.prefix(3) { print("\\(result.identifier): \\(result.confidence * 100)%") }}

// 执行图像分析guard let image = UIImage(named: "photo.jpg")?.cgImage else { return }let handler = VNImageRequestHandler(cgImage: image)try? handler.perform([request])


这段代码展示了如何轻松地将强大的神经网络集成到您的 iOS 应用中。您只需要使用 coremltools 工具将模型从 PyTorch/TensorFlow 转换为 .mlmodel 格式即可。



2. Create ML:几乎无需代码的训练



对于简单任务(文本分类、图像分类、表格数据),苹果提供了 Create ML——一个内置于 Xcode 的图形界面工具。您只需拖拽数据即可训练模型。但如果您更喜欢代码,Create ML 也可以作为框架使用:



import CreateMLimport Foundation

// 加载训练数据let data = try MLDataTable(contentsOf: URL(fileURLWithPath: "/path/to/train.csv"))

// 创建分类器let classifier = try MLClassifier(trainingData: data, targetColumn: "label")

// 评估准确率let metrics = classifier.trainingMetricsprint("准确率: \\(metrics.classificationError * 100)%")

// 保存模型try classifier.write(to: URL(fileURLWithPath: "/path/to/model.mlmodel"))


这对于 MVP(最小可行产品)或原型开发来说是理想的选择。然而,对于复杂架构(如 Transformer、GAN),Create ML 并不适用。



3. Swift for TensorFlow (S4TF):一颗陨落的明星



Swift for TensorFlow 项目是谷歌打造 Python 替代品用于 ML 的一次雄心勃勃的尝试。它提供了语言级别的自动微分以及与 TensorFlow 的集成。遗憾的是,2021 年谷歌停止了 S4TF 的积极开发。然而,其遗产得以延续:S4TF 的许多理念已转移到 Swift Numerics 和 swift-ml 库中。



示例(如果 S4TF 仍在活跃开发):



import TensorFlow

// 简单的神经网络struct Model: Layer { var layer1 = Dense<Float>(i

博客

书籍推荐