如何为iOS应用训练核心ML模型

如何为iOS应用训练核心ML模型_第1张图片 您将要创造的

Core ML使iOS开发人员可以轻松地向其应用程序添加深度机器学习。 在本文中,我将向您展示如何训练Core ML模型以得出智能见解。

过去一年,机器学习无疑是最热门的主题之一,各种公司都在努力使他们的产品更加智能,以改善用户体验并使其产品脱颖而出。 根据麦肯锡2017年的《机器学习与人工智能状况》,仅去年一年,谷歌就在人工智能上投资了200亿至300亿美元。

人工智能正在变成世界领先科技公司之间的专利和知识产权(IP)竞赛...该报告引用了许多内部开发示例,包括亚马逊对机器人技术和语音识别的投资以及对虚拟代理和机器学习的Salesforce。 宝马,特斯拉和丰田领先汽车制造商在无人驾驶汽车中使用机器人技术和机器学习的投资。 丰田计划投资10亿美元建立新的研究所,专门研究机器人和无人驾驶车辆的AI。 (来源: 《福布斯》 )

苹果在自己的应用程序中利用了机器学习,这一趋势也不例外。 例如,适用于iOS的“照片”应用程序可以识别人脸,物体和地标,而Siri可以从语音中推断出意图和含义。 iOS消息基于先前的用户行为智能地建议和预测单词。

在本教程中,您将学习如何将机器学习算法应用于一组训练数据,以创建训练后的模型,该模型随后将基于新输入进行预测。 全部归功于Apple的新Core ML框架。

本教程的目标

本教程将向您介绍机器学习的一部分。 您将使用流行的深度学习算法框架在简单的iOS应用中训练和集成机器学习模型。 在本教程中,您将:

  • 学习一些基本的机器学习概念
  • 使用样本数据训练模型
  • 将经过训练的模型集成到iOS应用中

在了解了NLP的理论之后,我们将通过一个简单的Twitter客户端,分析推文消息,将我们的知识付诸实践。 继续并克隆教程的GitHub存储库,并查看我们将从头开始创建的应用程序的最终版本。

假设知识

本教程假定您是一位经验丰富的iOS开发人员,但是尽管您将使用机器学习,但是您无需具备该主题的任何背景知识。 您将使用一些Python创建经过训练的模型,但是您可以在没有Python知识的情况下遵循本教程示例。

机器学习101

机器学习的目标是使计算机无需经过明确编程即可执行任务,而是具有自主思考或解释的能力。 当今最受瞩目的用例是自动驾驶:赋予汽车视觉上诠释其环境并独立驾驶的能力。

如今,大公司利用机器学习,通过使用深度学习算法来识别模式和相关性,从而根据历史数据做出更好的业务决策,从而使他们可以更好地预测未来。 例如,您可以解决诸如“特定客户购买特定产品或服务的可能性有多大?”之类的问题。 根据先前的行为有更大的信心。

机器学习最适用于您具有答案历史记录的问题,正如我们在本教程稍后部分研究示例问题时所发现的那样。 运行中的机器学习的一个示例是您的电子邮件垃圾邮件过滤器,该过滤器使用监督学习(无论您将项目标记为垃圾邮件还是不将其标记为垃圾邮件)来更好地过滤垃圾邮件。 机器学习模型对所有关于过去结果的知识进行编码,并将其提供给算法以在运行时有效使用。

乍一看可能听起来有点让人不知所措,但这并不复杂,我将在不久的将来指导您完成如何创建经过训练的模型。 通过算法设计出经过训练的模型后,借助Core ML,您可以将其转换为iOS可以使用的模型。

Core ML是Apple SDK系列的新功能,是iOS 11的一部分,可让开发人员实现多种机器学习模式和深度学习层类型。

如何为iOS应用训练核心ML模型_第2张图片

从逻辑上讲,自然语言处理(NLP)与另外两个强大的库Vision和GameplayKit一起位于Core ML框架内。 Vision为开发人员提供了实现计算机视觉机器学习以完成诸如检测面部,地标或其他对象之类的功能的能力,而GameplayKit为游戏开发人员提供了用于编写游戏和特定游戏功能的工具。

与其他解决方案相比,Core ML的优势在于,Apple优化了机器学习以在设备上运行,这意味着减少了内存功耗并减少了延迟。 这还将容器中的用户信息容器化,从而提高了隐私性。

如何为iOS应用训练核心ML模型_第3张图片

通过对机器学习和模型的概述,让我们通过创建您的第一个训练模型将理论付诸实践。

训练模型

为了使模型有用,需要对模型进行培训,以将数据识别为信息,随后可以使用适当的算法来断言预测。 Core ML当前支持以下模型类型:

如何为iOS应用训练核心ML模型_第4张图片

除了指定算法之外,您拥有的数据越多,模型训练得越好,并且预测越准确。 在开始创建Core ML模型之前,让我们看一下将要使用的示例应用程序,尤其是示例数据。

示例应用程序:拉斯维加斯酒店得分预测器

在本教程中,我们将使用拉斯维加斯大道上酒店评论的开源数据集,我从UCI那里获得了该数据集,以说明如何训练模型和计算相关性。 您可以查看我们将在应用程序中使用的完整的逗号分隔CSV文件 。 数据的结构如下:

Nr. reviews,    Nr. hotel reviews,	Score,	Hotel name,	Hotel stars
11,	4,	5,	Circus Circus Hotel & Casino Las Vegas,	3
119,	21,	3,	Circus Circus Hotel & Casino Las Vegas,	3
...

我们将有兴趣根据每个特定酒店的酒店评论数量和一般评论数量之间的相关性来预测酒店的星级,这是一个很好的例子,但足够简单,可以说明使用以下方法训练模型的概念简单的数据。

将逗号分隔的CSV文件下载到一个新文件夹中,此练习将使用该文件夹。 现在,让我们着手尝试一些Python,以实现以下目标:

  • 导入必要的库,包括Python Core ML库
  • 导入我们的样本数据
  • 使用名为SciKit的库将线性回归算法应用于我们的数据
  • 确定我们要建模的数据中的列( Nr。评论Nr。酒店评论酒店星级
  • 识别可能影响的列( 得分
  • 将训练后的模型转换为核心ML模型

似乎似乎有很多步骤,但并不像您想象的那样令人生畏。 不管您使用该语言的经验如何,接下来将要演示的Python代码都将很容易理解。

首先,我们将设置所需的模块和依赖项,包括SciKit , coremltools (Apple的Python官方Core ML工具)和pandas (用于数据结构分析的强大工具)。

打开一个终端窗口,导航到您拥有CSV文件的项目文件夹,然后输入以下内容:

sudo -H pip install --ignore-installed coremltools scikit-learn pandas

接下来,使用您选择的编辑器,创建一个新的.py文件,并将其命名为convert_reviews.py之类的名称,添加以下行以导入将要使用的库:

from sklearn.linear_model import LinearRegression
import pandas
import coremltools

在import语句之后,直接添加以下内容:

data = pandas.read_csv("LasVegas-Trip-Dataset.csv") #(1) Import CSV file
model = LinearRegression() #(2) Apply linear regression
print(data)
model.fit(
    data[["Nr. reviews", "Nr. hotel reviews", "Hotel stars"]], data["Score"]) #(3) Data to extrapolate

到目前为止,我们只是使用pandas框架导入CSV,将导入的数据打印到屏幕上,然后使用SciKit框架建立线性回归算法以应用于我们感兴趣的外推列。

不必太担心线性回归算法的含义,但是知道我们正在使用一种简单的建模算法技术进行预测。 在这个项目中,我们对它如何影响我们的酒店得分感兴趣,这是我们刚刚使用model.fit函数建立的。

现在,我们有了训练有素的模型,但是我们仍然需要将其转换为CoreML可以使用的模型,这是coremltools的用处 。插入以下代码行:

coreml_model = coremltools.converters.sklearn.convert(
    model, ["Nr. reviews", "Nr. hotel reviews", "Hotel stars"], "Score") #(4) Convert 
coreml_model.save("Vegas_Reviews.mlmodel") #(5) Export to a CoreML model object

最后两行将您的模型转换为Core ML兼容模型,然后将结果保存为.mlmodel对象,以供在Xcode项目中使用。 保存Python脚本并通过终端运行它:

python convert_reviews.py

假设您没有遇到任何错误,将生成Vegas_Reviews.mlmodel文件,并且您准备好的训练模型将被导入到Xcode中。

整合训练模型

对于本教程的第二部分,您将创建一个具有单个视图控制器,几个滑块和段控件的简单应用程序,以使用户能够切换各种值,从而观察各种Core ML预测。 最终的应用程序看起来将接近以下内容:

如何为iOS应用训练核心ML模型_第5张图片

在Xcode中,创建一个新的Single View App Swift项目,并为其命名。

如何为iOS应用训练核心ML模型_第6张图片

接下来,通过将生成的Vegas_Reviews.mlmodel文件拖到导航项目窗格中,确保已将其包含在项目中。


现在,打开ViewController.swift文件,并添加以下内容:

class ViewController: UIViewController{
    let reviews = Vegas_Reviews()

    @IBOutlet weak var stackView: UIStackView!

    @IBOutlet weak var scoreValue: UILabel!

    @IBOutlet weak var nrReviews: UISlider!

    @IBOutlet weak var nrHotelReviews: UISlider!

    @IBOutlet weak var stars: UISegmentedControl!

您要做的第一件事是创建模型的实例,您将在稍后的课堂中使用该实例进行预测。 您还将创建一些IBOutlet变量,这些变量将很快连接到情节提要中,这些变量映射到我们要使用的各个模型属性。

切换到Storyboard,并添加我们在视图控制器中声明的相应控件,确保将每个控件连接到视图控制器:

如何为iOS应用训练核心ML模型_第7张图片

切换回ViewController.swift文件,并添加以下@IBAction方法:

@IBAction func makePrediction(_ sender: Any){
        let nrReviewsSelected = Double(nrReviews.value)
        let nrHotelReviewsSelected = Double(nrHotelReviews.value)
        var starsSelected: Double{
            switch stars.selectedSegmentIndex {
            case 0:
                return 3.0
            case 1:
                return 4.0
            case 2:
                return 5.0
            default:
                return 5.0
            }
        }

        if let predictions = try? self.reviews.prediction(Nr__reviews: nrReviewsSelected, Nr__hotel_reviews: nrHotelReviewsSelected, Hotel_stars: starsSelected){

            let scoreFormatter = NumberFormatter()
            scoreFormatter.numberStyle = .decimal
            scoreFormatter.maximumFractionDigits = 1
            self.scoreValue.text = scoreFormatter.string(for: predictions.Score)
        }else{
            print("Error")
        }
    }

这是我们预测引擎的主要功能代码,因此让我们逐步剖析此方法。 首先,我们将各种控件转换为Double类型,在调用预报方法时,它将作为参数传递。 try? 块,调用self.reviews.prediction() ,它是属于我们模型的自动生成的方法,以及在导入训练self.reviews.prediction()模型时定义的预期属性。

然后,预测块的结果将传递到标签ScoreValue ,以显示在您的应用中。 我们快要完成了–只需再次切换回情节@IBAction并将每个控件的valueChanged:属性映射到我们在视图控制器中创建的@IBAction方法即可。 您希望每次更改滑块或段值时都调用此方法。 并采取良好措施,还可以确保在viewDidLoad()方法中自动调用此方法,以便它从一开始就更新:

override func viewDidLoad() {
        super.viewDidLoad()
        self.makePrediction(self)
  }

在Xcode中构建并运行该应用程序,然后在模拟器中,切换各个滑块并观察得分值预测,因为该得分会根据其他通常影响酒店评论和评论数量的因素而变化。

如前所述,这确实是一个人为的示例,但是它为您提供了如何构建自己的实验进行关联的想法,更重要的是,您可以了解在iOS中实施训练有素的模型有多么简单。

结论

借助iOS 11中的Core ML ,Apple使没有深度学习背景的日常开发人员能够轻松地向其应用程序添加智能。 所有处理都在设备上完成,从而确保了更高的性能,而无需担心将数据存储在云中的隐私问题。 借助Apple先前在“照片”和“邮件”等内置应用程序上进行“机器学习”的机器学习实现,第三方开发人员现在仅需几行代码就可以识别模式,图像和文本意图。

毫无疑问,这仅仅是Apple Core ML运动的开始,但是对于开发人员来说,这是一个开始全面思考数据的绝好机会。 借助Core ML,我们可以为用户提供更好的用户体验,同时为产品经理提供对用户行为的更深入的业务洞察。

翻译自: https://code.tutsplus.com/tutorials/how-to-train-a-core-ml-model-for-an-ios-app--cms-30147

你可能感兴趣的:(如何为iOS应用训练核心ML模型)