在 iOS 中加入 机器学习
首先什么是机器学习….. 在这篇文章中, blabla…的讲了一堆, 感觉没有直接由国人用国人的理解用汉语讲出来的对口, 反正感觉这篇文章的描述过于和生物的神经网络结合在一起了, 不太好, 会误导. 或者英文原文会好一点? 反正关于机器学习的基本概念, 我是从其他地方看来的, 比较懒的话, 推荐一个叫莫烦
的 UP主, b 站有开哦~
嗯, 关键点在这:
Apple 的 API 只允许在设备上进行推断, 因此你需要有一个预先训练好的模型来执行预测
选择一个预训练模型
- Apple 提供了4种预训练模型, 大多数在日常图像方面做的不错
- 使用开源产品提供的预训练模型, 如 Keras
机器学习 API
主要分了三层:
Vision
,Natural Language Processing
,GamePlayKit
Core ML
Accelerate & BNNS
一般我们可以方便的使用顶层的 API,
也可以使用Core ML
这一层的 API,将预训练模型集成进去, apple 提供了一个很好用的统一 API, 从而能够借助机器学习模型格式来使用任意类型的模型.
也可以深入底层, 直接使用底层提供的 API, 但是这样做就不得不自己处理很多事务.
集成 CoreML
大部分API 都是以 CPU 为中心的, 我们有几个关注点:
- Core ML 工作流程
- 如何导入模型
- 借助 CoreML 能实现哪些类型的操作
CoreML中提供了许多不同类型的机器学习方法。其中有迷你神经网络、组合树、支持向量机和广义线性模型。Core ML 提供给我们的方法基本涵盖了绝大多数机器学习技术。
集成自带模型
集成很简单, 可以使用 apple 提供的4种机器学习模型中的某一个, 导入到 Xcode, Xcode 会自动用 Swift 生成一个具备该模型名称的类. (在 wwdc 中的例子就是 MarsHabitatPricer() 这个机器学习模型了)
然后, 就能使用 MarsHabitatPricer()
来初始化这个模型, -> 然后把数据输入其中, 并进行预测. 这些就是…使用所创建的模型, 基于拥有的输入来调用预测方法就可以了…编译运行… 很简单把?
集成第三方模型
这属于自定义机器学习模型
可以查看到 apple 提供的所有模型能干什么, 当 apple 提供的所有模型都无法为应用带来价值的时候, 就可以考虑使用自定义模型了
一个是 Google 的Places205-GoogleNet
, 可以检测205个类别的图像场景, 比如可以检测是否爱机场里, 它会给出准确的信息, 而不是检测图片里是不是又飞机…
还有另外三种不同的数据模型:ResNet50、Inception V3 和 VGG16,用于检测照片中的焦点对象,因此它会将背景给忽略掉,并且可以识别大约 1,000 个类别。
每一个模型都有不同数量的类别, 要注意的是模型需要在构建的时候能正确加载, 这可能会消耗很多内存.
开源模型
可以去 Keras, 或者其他模型. Apple 提供了一个C CoreML 模型迁移工具, 大多数机器学习是以 Python 为中心的, 我们可以善于利用这一点, 依靠强大的社区支持. 我们使用 Apple 提供的这个工具, 不需要安装 Python 环境, 基本上只需要: pip install -U coremltools
你可以从其他机器学习工具中获取模型, 然后将其转换为 CoreML 模型, 并将模型保存下来. 在 Apple 的文档中, 已经告诉了哪些格式可以转换, 最受欢迎的是 Keras 和 Caffe
Keras
使用 Keras
来进行自定义模型的制作.
比如, 你想使用 Apple 提供的某个模型, 它能够识别骑车和自行车, 但是不能识别是哪类自行车, 这就需要你将拥有的数据集, 标记这些自行车, 然后创建自己的模型. Keras 由高效的数值计算库支持, 本质上是一个能够创建模型的引擎.
支持 Keras
的常见引擎还包括了TensorFlow
和 Theano
, TensorFlow
的文档很丰富全面.
关于 Python
自己网上搜搜把, 推荐 Udacity 的相关课程, 比较简单, 不用经历过多的无聊编程练习.
Python 环境的话, 建议使用虚拟环境 virtualenv 或者直接使用 Anaconda
Keras 模型
(下面是拷贝…我就不解释了,..)
Keras 模型由一组模型层 (layer) 所定义,就像之前对神经网络的大概描述一样。您可以在代码中创建这些模型层。我们这里将要创建一个序列模型,然后逐次添加模型层,直到我们对网络拓扑满意为止。首先我们要做的是确保输入的数字是正确的,因为我们在本次讲演中不会涉及到太多的细节,如果您对此好奇的话,可以查看此教程:使用 Keras 和 Python 构建您的第一个神经网络。
我们将简要地介绍几点步骤,以便您能够完成神经网络的创建。与 iOS 应用代码库相比,这里所涉及的代码部分非常少:
- 加载数据。
- 使用序列模型层 (sequential layer) 来定义模型。
- 比较模型。
- 适配模型,这意味着需要运行某些数据来训练模型。
- 评估模型——借助训练完的模型来运行一组数据,查看实际输出与预期输出是否匹配。
万事大吉——只需要用 31 行代码就可以完成神经网络的建立,所以这个步骤是非常平易近人的。一旦您得到了这个自定义模型,那么您就可以使用 Apple 开发的 Core ML 工具包,它将为您生成一个 ML 模型,这样就可以在应用中使用了。
测试与 Instrument
我认为对您的应用进行充分测试是一个明智之举,然后再使用 Instrument 来调试应用。考虑到与应用的其余资源相比,这些模型的占用资源可能会非常大,您应该使用 Instrument 来确保不会引起大量的内存波动 (memory spike) 或者任何可能会对用户体验产生负面影响的因素。在使用机器学习库的时候,这一点是非常重要的,因为机器学习是一个非常新颖的玩意儿,而且通常占用的内存要多得多。
未来
以下是摘录, 其中的资源有兴趣的可以看看~
机器学习的未来
一年以来,我一直在关注这个领域,并且也关注其他的社区,例如 Android 以及开发者社区。我们认为以后会发生什么呢?Apple 将会继续大力推广机器学习,我们已经在 WWDC 2017 中看到这一趋势了并且在过去的几年里,他们聘请了很多机器学习专家,最终新的功能也会纳入到开发者工具以及我们开发的应用当中。看看开发者是如何利用这些新 API,这将会非常有趣,因为这可能会让很多应用极大地改善用户体验,并且为使用机器学习来改善应用这个领域开辟出一条新路。
我希望在机器学习资源方面未来能够有所改善。如果我们正视机器学习领域的话,2009 年麻省理工学院认为这并不是很实用的东西。从那时候起,在这过去的十年以来,机器学习得到了很大的发展,但是如今资源的数量才开始大幅上涨。我不建议大家从线性代数教科书开始看,因为这并不必要,并且还很有可能吓到你。我希望能够有更多适合 iOS 开发者的资源。
我认为这些资源将会来自于 Apple 和社区。Apple 在几个月前宣布将自行制作 GPU,所以我认为这样才真正能给设备所提供的功能带来帮助,包括移动设备、笔记本电脑以及其他 Apple 的产品。我认为他们可能会在设备上添加优化过的机器学习芯片。这一点在其他社区中都有所谈论,我关注了很多频道,大家都认为这种做法是自然而然的,这样做更容易让机器学习不会带来负面的性能效果。
其他资源
Apple’s machine learning documentation
Keras OSS Models
Setting up Anaconda
Neural Networks 101
这将是一个飞速发展的领域,所以如果您有兴趣的话,可以关注一些博客、新闻以及频道,我实际上建立了一个名为 Let’s Infer 的新闻频道。在 WWDC 结束之后,我将会在上面发布新闻,随后我也会建立一个与之相关的频道。机器学习新闻:
This Week in Machine Learning and AI
Keras Blog
machinethink.net/blog
alexsosn.github.io/ml/2015/11/05/iOS-ML.html
课程:Udacity’s Intro to Machine Learning:如何使用 Python,完全免费!
Udacity’s Intro to Data Science Nanodegree
Coursera’s Machine Learning at Stanford
我同时也在制作一个使用了机器学习功能的自行车应用,这就是为什么这里我使用了自行车相关的示例。这个应用将帮助用户弄清楚他们想购买什么类型的自行车,因为第一次购买的用户通常并没有详细的词汇来描述他的需求。例如,他需要一个带有固定把和钢框架的固定式齿轮自行车。应用将会给用户提供建议,然后就可以在应用中在线购买。