[译]Create ML教程:开始入门

本文是对Raywenderlich上的mac/iOS平台机器学习文章Create ML Tutorial:Getting Started的翻译.
因为译者对机器学习了解不够深刻,翻译的疏漏再所不免,敬请原谅.html

本文资料下载python

Create ML就是苹果决心的证实:苹果决心让你更简单在app中使用机器学习模型.在本教程中,你将学习如何用Create ML加速工做流程:经过改进数据来改进模型,而且经过使用Xcode和Swift来下降学习曲线.ios

与此同时,你还会更加熟悉ML工具集和术语.而不须要引入数学! 你不须要知道如何编写一个编译器来使用Swift,你也不须要编写一个新的ML算法来使用分类器.有了Create ML,你就没有了不开始学习机器学习的理由!git

Apple ML的简明历史:github

  • Core ML:在WWDC 2017上宣布,已经被每一个主流ML平台支持,可导出已有模型.可是已有模型老是太大,而且/或者,太笼统.
  • Turi Create:在WWDC 2017以后被收购,它能让你用本身的数据来自定义现有模型.只不过是用...Python :[.
  • IBM Watson Services:在2018年三月宣布.你能够自定义IBM Watson的视觉识别模型来识别你本身的数据.只需拖拽你的数据,无需代码,但你须要使用IBM Cloud,而且Core ML模型是被Watson API包装过的.
  • Create ML:在WWDC 2018上宣布.用Xcode和Swift的ML!目前,只包括了七个Turi Create重点工具集中的两个,再加上一个通用分类器和回归量,还有数据表.我认为,这是一个引导你通向Turi Create宫殿的诱饵,宫殿里面居住着一条"好狗"而不是邪恶女巫!(Turi Create的logo是一条狗.)

本教程中,你将从一个Create ML小技巧开始:建立一个带有GUI的图片分类器,使用的图片来自Kaggle Cats and Dogs Dataset.而后,你将其和使用一样数据集的Turi Create示例进行对比.正如你看到的那样,Turi Create更加手动化,但它也更加灵活,一点也不难以理解!对于基于代码的示例,你将对比Create ML和Turi Create文本分类器代码.算法

而后我将会向你展现如何快速建立环境以使用Turi Create.苹果甚至修改了Xcode的playgrounds,让它更接近Jupyter Notebook(此前被称为 IPython notebook是一个交互式笔记本,支持运行 40 多种编程语言),这样代码环境会让人更加熟悉! 试一下,你将用Turi Create在Jupyter notebook中,给相同数量的猫和狗的数据集建立一个图片类似度模型.macos

能够耐心等待并但愿苹果将Turi Create的其他功能转移到Create ML中,可是你会发现用Create ML作为垫脚石来直接使用Turi Create并不困难.若是你须要的更多信息,咱们还有教程教你使用 Keras, scikit-learn and Caffe (稍后推出).一旦你熟悉了开发环境,那么,ML领域有大量的教程,可供你选择.编程

注意:Swift for TensorFlow呢?Create ML是给Swift用户的ML工具,而Swift for TensorFlow是给ML用户的Swift语言——该项目目标是提供一个更好的编程语言,和编译器.json

开始

要学习本教程,你须要:swift

  • 一台Mac,运行macOS 10.14 Mojave beta
  • Xcode 10.x beta

点击文章开头或结尾处的下载资料按钮.starter文件夹中包含了:

  • Pets-100, Pets-1000Pets-Testing:这些包含了猫和狗的图片;你将用这些来训练和验证这个猫-狗分类器.
  • ClassifyingImagesWithVisionAndCoreML:苹果CoreML的示例程序;你将用本身在Create ML中训练的模型替换其中的MobileNet模型.
  • good-dog.png:一个附加的狗的图片.
  • turienv.yaml:你将用这个文件来建立一个环境,来运行Turi Create代码.

Create ML图片分类器

首先,准备你的数据 —— 你将用来训练一个图片分类器模型来识别猫和狗的图片.当你展现一张图片,它将返回标签"Cat"或"Dog".要训练这个模型,你须要一个Cat文件夹和一个Dog文件夹.理想的状况下,这两个文件夹应该有一样数量的图片 —— 若是你有30张猫的图片和200张狗的图片,那模型将会偏向于将图片识别为Dog.不要包含任何同时有多种动物的图片.

每一个类须要多少张图片?至少10张,可是更多的图片会让模型更加精准.Kaggle Cats and Dogs Dataset中每一个类有12500张图片,但你并非所有须要!训练的时间会随着图片数量而增加,图片数量加倍的话,训练时间大体也会加倍.

为了训练一个Create ML图片分类器,你须要给它一个训练数据集(training dataset) —— 一个包含了分类文件夹的文件夹.事实上,在starter文件夹中包含两个我准备好的数据集,Pets-100Pets-1000.

在完成模型训练后,你将须要一个 测试数据集(testing dataset) 来验证模型:一个包含Cat和Dog文件夹的文件夹.测试数据集中的图片应该与训练数据集中的不一样,由于你须要验证的是当模型遇到没见过的图片时表现如何.若是你在收集本身的数据,你要将20%的图片放到测试数据集中,其他放在训练数据集中.但咱们每一个类有12500张图片,因此 Pets-Testing包含了900-999张从每一个类中抽取的图片.

你将从训练Pets-100模型开始,而后用Pets-Testing测试.而后用Pets-1000训练,用Pets-Testing测试.

苹果的特殊技巧

在Xcode 10中,建立一个新的 macOS 版的 playground,而后输入下面代码:

import CreateMLUI

let builder = MLImageClassifierBuilder()
builder.showInLiveView()
复制代码

显示辅助编辑区,点击运行按钮:

你将建立并展现一个交互式的视图,来训练和验证一个图片分类器.它神奇地让你体验不一样的数据集 —— 由于最重要的不是谁有最好的算法,而是谁有最好的数据.算法目前已经很好了,你可让数据科学家研究它以变得更好.可是垃圾数据进去,垃圾模型出来;绝大部分时间,精力,花费在了为机器学习策划数据集上.那么如今,这个GUI图片分类器帮助你提高数据规划技巧! 能够下载Kaggle Cats and Dogs Dataset并建立你本身的数据集.在你看到个人数据集产出后,你可能会想要更加认真从一大堆中挑选图片.

拖拽Pets-100文件夹到视图中.训练进程当即开始了.在一段时间后,一个表格出如今debug区域,显示Images Processed, Elapsed TimePercent Complete:

这里发生了什么?这叫作迁移学习(transfer learning).底层模型 —— VisionFeaturePrint_Screen, 它支承了Vision framework —— 是预先用海量数据集训练过的,能识别大量不一样类型图片.它经过学习从图片中寻找哪些特征features,及如何组合这些特征来分类图片.因此,你的数据集的训练时间,实际就是抽取大约1000特征的时间.这些特征可能包括了低级的形状和纹理,以及高级的形状如耳朵,两眼距离,口鼻形状.而后它只花费了不多一部分时间来训练一个逻辑回归(logistic regression) 模型来将你的图片分红两类.这就相似于将一条直线分红离散的点,只不过是在1000的尺度上,而不是2.可是它仍然很是快:我这边共了了1m 15s进行特征抽取,0.177886 seconds进行训练及应用逻辑回归.

迁移学习只能在,你的数据集特征点很是相似于训练模型的数据集特征点时,才能成功运行.一个在ImageNet上预先训练的模型 —— 通过大量真实照片训练 —— 可能没法迁移到铅笔画或显微照片上.

你可能想要再浏览两篇有趣的文章,关于Google Brain/Research中的特征:

注意:我是在early-2016 MacBook with 1.1GHz CPU上运行的Create ML.你的时间可能会更快,尤为是当你的Mac是最新款时,或更新的macOS,Xcode版本等
在2017 MacBook Pro with a 2.9GHz i7 CPU, 特征抽取时间降低到11.27s 训练只花费了 0.154341 seconds.

训练&验证准确率(validation accuracy)

当训练完成后,视图上显示TrainingValidation准确率指标,及debug区域的详情.

我获得了100%训练及验证准确率!但你的数值可能不一样,由于 验证集(validation set) 是从训练会话中随机挑选的,因此你的验证集将会是不一样的另外10张图片.没有办法知道哪些图片被选中.

那么什么是验证(validation)?准确率(accuracy)数值是什么意思? Training accuracy很简单:训练涉及到猜想每一个特征的权重.由于你给图片的标签是"Cat"或"Dog",训练算法可以检验它的答案并计算正确的百分比.而后,反馈出正确或错误信息给下一次迭代来细化权重. Validation accuracy也相似:在训练开始前,从数据集中随机挑选10%放到验证数据中.像训练集同样,特征被抽取出,答案被计算出来并带有权重.可是结果不用在直接重计算权重上.他们的目的是为了防止模型过拟合overfitting —— 过度关注一些不重要的特征上,如背景色或灯光.若是验证准确率和训练准确率很是不一样,算法会自动调整.因此,验证图片的选择,同时影响了验证准确率和训练准确率.Turi Create让你提供一个固定的验证数据集,若是你已经给你的测试数据建立了一个相似特征参数的话.而且你的测试数据集是用户给app提供的照片的表明.

评估(Evaluation)

真正的问题是:模型如何给没有训练过的图片分类?

视图提示你拖拽图片以开始测试:拖拽Pets-Testing文件夹到视图中.很快,在debug区域展现出评估(Evaluation) 准确率,及其详情:

97%准确率:confusion matrix说,有两张猫的图片被误分类成狗了,另有四张狗的照片被误分类成猫了.查看测试图片,看看哪些被模型混淆了.有一张已经在上面图中展现了,还有一张以下:
这两张图片是至关很差的:一个是模糊且太亮了,另外一个是模糊且缺乏头部信息.模型是重设了图片尺寸到299x299,因此切除掉了一部分你关心的物体,他们理想状况下应该在图片的中心部分,不能太大也不能过小.

在上图中,我点击展现按钮来查看置信度:这个模型100%相信这是一条狗!可是仔细查看其余照片会发现,模型对于其余质量很差的照片依然获得了正确答案.

改进准确率

这个Pets-100训练数据集每一个类只有50张照片.Create ML让尝试不一样数据集变得简单,来看看更多的数据如何改善准确率.

点击playground的stop按钮,而后当它变成run时再点击一次.这样加载一个新的视图,准备好接受训练数据.

拖拽 Pets-1000文件夹到视图中.抽取1000张图片的特征须要的时间会是100张的五到十倍.等待的时候,能够看看苹果的一篇有用的总结文章 Improving Your Model’s Accuracy,它给出了改进不一样准确率指标的具体建议.

改进训练准确率

  • 增长图片分类器的最大迭代数(Max iterations).(该选项在Xcode第一个beta版不能用,但beta 2版就可使用了)
  • 为文本分类器使用不一样的算法.
  • 为通用分类器或回归量使用不一样模型.

改进验证准确率

  • 增长数据量:对于图片分类器,你能够给图片数据增长参数,如翻转flipping, 旋转rotating, 斜切shearing或改变曝光exposure等.参见Apple’s illustration of data augmentation:
  • 可能过拟合:减小最大迭代数(Max iterations).你可能没必要为此担心,由于个人训练只运行了不到10次就达到了满意效果并停了下来.

改进评估准确率

确保你的训练数据足够多样化,可以匹配你的测试数据,而且这两个数据集和你的app上用户上传的图片数据足够相似.

回到playground

训练1000张图片获得100%的训练准确率,但只有96%的验证准确率,咱们能够多运行几回,有时能获得99%的验证准确率.

拖拽 Pets-Testing文件夹到视图中,来评估(evaluate)这个模型;它在200张测试图片上获得了98.5%的准确率!
此次confusion matrix说模型将三个猫的图片分类为狗.实际上,只有只有一样的两张是以100%置信度被错误标记为狗的.
尽管confusion matrix没有报出错误,但仍然有两张狗的照片被标识为猫,只是置信度较低.它们都是模糊不清,对比度低:
也许你想要更加改善模型,那就须要更多数据,要么使用带参数的1000张图片,要么使用Kaggle中的完整数据集.或者也能够对你的数据集进行挑选,忽略那些糟糕的图片.能够大胆去体验一下!记住这是很容易作到的,训练更大的数据集只多花了一点时间.我尝试过运行了5000张图片:只花了32分钟,我获得了99%的训练准确率和验证准确率...

增长最大迭代次数(Max iterations)?

这个示例程序的准确率至关的好 —— 底层模型极可能已经知道了猫和狗.可是,若是你在训练不一样的类型,获得了一个很低的训练准确率,你可能会试着将最大迭代次数(Max iterations) 设置为20.

中止并从新开始 playground,而后点击右上角的展开符号,将10改成20,而后按回车:

点击展开符号以关闭设置,而后打开检查一次,确保仍是20.

注意:在Create ML 和 Turi Create中建立都是个问题 —— 你不能不建立就训练模型.为了增长迭代的次数,你必须从头开始并像原来同样抽取特征.Create ML GUI并无提供选项以保存特征.在那些更加手动的框架中,如Keras,能够构造,编译,而后调整模型,因此调整操做只影响了后面的操做.事实上这是有可能的,对应到Turi Create源码中,拿出抽出图片特征点的低级别代码 —— 这部分不少时候最有用.而后你能够保存抽出的特征,并在你想要更多迭代次数时从新加载它们! 但愿这些能让你对Turi Create和Keras更加感兴趣!

使用图片分类器

这里又是苹果的特殊技巧.Create ML GUI输出一个Core ML模型,而后直接拖拽你的模型到旧的Core ML项目中,只要改变代码中的一个单词,就能够运行了!

点击右上角的展开符号,会看到一个不一样的设置项.点击文本,改为PetsClassifier.更改Where位置为starter文件夹,而后点击save:

打开starter文件夹中的ClassifyingImagesWithVisionAndCoreML项目.这是苹果2017年的项目,我已经把它升级到了Swift 4.2,并修复了照片读取的问题.这个项目用了MobileNet.mlmodel,大小为17.1MB:

拖拽PetsClassifier.mlmodel到项目的导航区中.它的大小是17KB:

搜索项目中的MobileNet:

let model代码段中,将 MobileNet替换为 PetsClassifier:

let model = try VNCoreMLModel(for: PetsClassifier().model)
复制代码

构建并运行.点击相机图标进入照片选择器,而后拖拽一些狗和猫的图片到Photos中:

选择一张;这个app将认出的结果显示在下面的label上:

Turi Create图片分类器

这段代码来自Turi Create image classifier example,使用了一样的数据集 —— 完整的25000张图片的数据集:

import turicreate as tc

# 1. Load images (Note: you can ignore 'Not a JPEG file' errors)
data = tc.image_analysis.load_images('PetImages', with_path=True)

# 2. From the path-name, create a label column
data['label'] = data['path'].apply(lambda path: 'dog' if '/Dog' in path else 'cat')

# Note: If you have more than two classes, extract the folder names like this:
# train_data["label"] = train_data["path"].apply(lambda path: os.path.basename(os.path.split(path)[0]))

# 3. Make a train-test split
train_data, test_data = data.random_split(0.8)

# 4. Create the model
model = tc.image_classifier.create(train_data, target='label')

# 5. Save predictions to an SArray
predictions = model.predict(test_data)

# 6. Evaluate the model and save the results into a dictionary
metrics = model.evaluate(test_data)
print(metrics['accuracy'])

# 7. Save the model for later use in Turi Create
model.save('mymodel.model')

# 8. Export for use in Core ML
model.export_coreml('MyCustomImageClassifier.mlmodel')
复制代码

这比你在playground中写的代码要多不少,可是你很快就会看到它是相似于Create ML文本分类器代码.

和你在Create ML中所作的相似:

  • 第1步到第4步,对应于建立训练和测试文件夹,而后拖拽训练文件夹到视图中.Turi Create必须从图片路径中抽取类的标签,但第3步随机分配20%的数据集到test_data,节约了你建立训练和测试文件夹的工做,而且每次运行代码时都会获得一份不一样的测试数据集.

注意:在第2步中,只抽取两个类的标签是一个特例.我已经在代码中加一个注释,来展现普通的状况.首先,os.path.split() 将路径分离为两部分:文件名(如42.jpg),及其余部分.而后os.path.basename() 是最后一个文件夹的名字,也是类的名字.

  • 第5步和第6步,对应于拖拽测试文件夹到视图中.Jupyter notebook能够像Create ML视图一个轻松展现predictions数组.你还能够过滤数据来找到错误的分类,而不用遍历查看整个测试图片集.
  • 第7步,保存模型以供使用,你能够从新加载它并运行在不一样的测试数据集上.
  • 第8步,输出Core ML模型.

因此,Turi Create图片分类是比Create ML更多手动操做,但更多灵活性.turicreate.create()文档列出了一些可选参数.你能够指定底层model以匹配Create ML,注意看Core ML模型的尺寸!若是你已经建立了一个真正的测试数据,不想让模型使用从你的训练数据中随机选择的测试数据,那么你还能设置固定的validation_set.

在Create ML中图片分类是一个很是特殊的例子:MLImageClassifierBuilder的GUI界面使们编写代码再也不是必须的了.但在下一章节中,你会看到其余Create ML模型仍是须要不少代码.

文本分类器

如今来比较一下,Create ML 和 Turi Create 是如何训练及测试文本分类模型的.Turi Create模型须要将测试文本转换进bag of words里 —— 而在Create ML模型中,这步转换是直接内置在Create ML模型中的,因此直接接收测试文本文件夹就能够了.

Create ML

下面是 Create ML文本分类器示例:

import CreateML

// 1. Load data from a JSON file
let data = try? MLDataTable(contentsOf: URL(fileURLWithPath: "<#/path/to/read/data.json#>"))

// 2. Make a train-test split
let (trainingData, testingData) = data.randomSplit(by: 0.8, seed: 5)

// 3. Create the model
let sentimentClassifier = try? MLTextClassifier(trainingData: trainingData,
  textColumn: "text", labelColumn: "label")
  
// 4. Training accuracy as a percentage
let trainingAccuracy = (1.0 - sentimentClassifier.trainingMetrics.classificationError) * 100

// 5. Validation accuracy as a percentage
let validationAccuracy = (1.0 - sentimentClassifier.validationMetrics.classificationError) * 100

// 6. Evaluation accuracy as a percentage
let evaluationMetrics = sentimentClassifier.evaluation(on: testingData)
let evaluationAccuracy = (1.0 - evaluationMetrics.classificationError) * 100

// 7. Add metadata
let metadata = MLModelMetadata(author: "John Appleseed",
  shortDescription: "A model trained to classify movie review sentiment", version: "1.0")

// 8. Export for use in Core ML
try? sentimentClassifier.write(to: URL(fileURLWithPath: "<#/path/to/save/SentimentClassifier.mlmodel#>"),
    metadata: metadata)
复制代码
  • 第1步,加载文本和标签列到表格中, 其中标签的值是三种:positive, negativeneutral.在WWDC 2018 Session 703 video中,展现了另外一种方式来加载单独保存的名称为positivenegative文本文件的方法,相似于加载图片到图片分类器的方法.但它只适用于Create ML;并不适用于Turi Create.

WWDC 2018 Session 703中的另外一种加载标签文本数据的方法:

let trainDirectory = URL(fileURLWithPath: “/Users/createml/Desktop/train”)
let testDirectory = URL(fileURLWithPath: “/Users/createml/Desktop/test”)
// Create Model
let classifier = try MLTextClassifier(trainingData: .labeledDirectories(at: trainDirectory))
复制代码

回到文本分类器主代码中:

  • 第2步,和Turi Create的 random_split() 同样,随机分配20%数据到testingData.可选的seed参数是用来设置随机数生成器的种子的.
  • 第3步,和Turi Create的 sentence_classifier.create() 中作的同样.
  • 第4-6步,计算训练,验证及评估准确率指标.
  • 第7步和第8步输出带有元数据的Core ML模型.

Turi Create

这些代码来自咱们的教程Natural Language Processing on iOS with Turi Create.它用10个诗人的诗集训练了一个句子分类器,来预测测试文本的做者.

import turicreate as tc

# 1. Load data from a JSON file
data = tc.SFrame.read_json('corpus.json', orient='records')

# 2. Create the model
model = tc.sentence_classifier.create(data, 'author', features=['text'])

# 3. Export for use in Core ML
model.export_coreml('Poets.mlmodel')
复制代码
  • 第1步,和Create ML同样,你能够从JSON或CSV文件中加载数据.
  • 第2步,训练模型.
  • 第3步,输出Core ML模型.

在Turi Create教程资料中包含一个iOS的app,你能够将文本粘贴在textview中来测试模型.这个app使用了一个wordCounts(text:) 函数,做用相似于Turi Create text classification example末尾的bag of words函数.

这个Turi Create文本分类器指望输入是以字典形式的单词和单词数.而Create ML文本分类器直接接收文本输入,并建立本身的bag of words.

Turi Create图片类似度

如今请深呼吸 —— 你将深刻Turi Create 冒险了!

Turi Create还有其余五个任务处理工具集(task-focused toolkits)目前暂未包含在Create ML中:

  • 推荐系统
  • 图片类似度
  • 物体检测
  • 风格迁移
  • 活动分类

猫狗的图片看起来很是有趣,因此你将训练一个模型来找到类似图片.

是的,你如今须要写点Python了.开发环境用Jupyter notebook你会感受很熟悉 —— 它很像是一个Xcode的playground,可是运行在你的浏览器中.

最简单的方式是使用Anaconda —— 它是ML社区建立的,用来整理全部版本的Python和ML库,并在单独的环境(environments) 中管理它们.

Anaconda & Notebooks

下载Python 3.6 version of Anaconda for macOS,在你的home directory中安装它,不要在root目录:

若是它说没法安装,点击 Install on a specific disk…按钮,而后点击返回到Home按钮 —— 就能够安装了:

注意:安装Anaconda及建立Tuti Create环境会花费几分钟时间.当你在等待时,能够浏览下Michael Kennedy在2014年十一月发表的Comparison of Python and Swift Syntax和Jason Brownlee在2016年五月发表的Crash Course in Python for Machine Learning Developers.Brownlee的文章包含了使用数据科学库NumPy, Matplotlib 和 Pandas的示例.Swift和Python语法的最大不一样是当你定义闭包,函数和类的时候,用缩进而不是 {...} .

建立Turi Create环境

可使用Anaconda Navigator GUI或者终端(Terminal)命令来建立环境,来运行Turi Create代码.

GUI:打开Anaconda Navigator,切换到Environments标签页面,并导入starter/turienv.yaml —— 点击文件夹图标并在Finder中设置文件位置. Anaconda Navigator将会从文件中填充环境名称:

Terminal:打开 Terminal,输入如下命令:

conda env create -f <drag starter/turienv.yaml file from Finder>
复制代码

启动Jupyter Notebook

turienv环境下,用GUI或Terminal命令来启动 Jupyter notebook.

首先,在Finder中,建立一个本地文件夹命名notebooks.

若是你用的是最新的Mac,下载解压Kaggle Cats and Dogs Dataset,而后移动PetImages文件夹到notebooks中,这样你就能够轻松将其加载到notebook中.

完整的Kaggle数据集包含25000张图片,在老的Mac上须要花很长时间来处理.也可使用Pets-1000文件来代替,或者建立你本身的数据集.

GUI:若是你使用Anaconda Navigator,切换到Home标签页,点击Applications on上的turienv,而后点击jupyter Launch:

一个终端窗口会打开,以运行Jupyter服务器,而后一个浏览器窗口显示你的首页文件夹.切换回你的 notebooks文件夹. Terminal:若是你在使用 Terminal,输入下列命令以加载 turienv:

source activate turienv
复制代码

这个命令行提示符(command line prompt)如今带有 (turienv) 启动.输入下面命令来在notebooks文件夹中启动Jupyter服务器,并显示浏览器窗口:

jupyter notebook <drag notebooks folder from the Finder>
复制代码

训练模型

建立一个新的Python 3.6 notebook:

双击标题,重命名notebook:

注意:这个示例和苹果的Image similarity示例同样,只是用了猫和狗数据集.

在notebook中包含了一个空白单元格.在单元格中输入下面一行,而后点击Shift-Enter来运行单元格:

import turicreate as tc
复制代码

注意:Shift-Enter在Xcode playground中也可使用,若是你只想运行一段代码的话.

又一个新的单元格出现了.输入下面内容,而后运行:

reference_data = tc.image_analysis.load_images('./PetImages')
reference_data = reference_data.add_row_number()
reference_data.save('./kaggle-pets.sframe')
复制代码

如今你正在将图片加载到表格中,并给表格添加行号,而后保存以供未来使用.忽略JPEG decode failure信息.

注意:当输入Python代码时,使用tab键来自动补全.

在下一个单元格中,运行下面语句来检索数据:

reference_data.explore()
复制代码

一个新窗口打开,显示id,路径和图片列.将光标移动到行上,展现图片:

接下来,运行下面语句:

model = tc.image_similarity.create(reference_data)
复制代码

这会花费一段时间 —— 在 [ * ] 中显示它正在运行.在等待的时候,阅读一下无监督学习(unsupervised learning) 吧.

注意:若是须要在完成前手动中止单元格,点击Stop按钮(在工具条中Run旁边).能够从PetImages中删除图片,或只加载Pets-1000.我在个人2015款MacBook Pro运行时,出去吃了午餐,90分钟回来后才运行完成.

无监督学习

提供标签数据给图片分类器,能让它经过检测本身的预测与标签的差别,来衡量准确率.这就是监督学习(supervised learning).

然而,有时尽管你提供了一样的标签数据集给一个图片类似训练器,它也并不使用这些标签:这个模型使用的是无监督学习(unsupervised learning).基础模型查看很是大量的图片,并教会本身,哪些像素组合会构成特征(features),能够用来聚类(cluster) "类似"的图片.因此正如图片分类器同样,大部分训练时间被用来从你的数据集中抽取特征.而后,它进行"暴力"最近邻居(nearest neighbors)模型训练:对于每张图片,它计算其到其它图片的距离(distance),并将其它图片按半径排序.而后,再一次与抽取出的特征点比较,这一步会很快.

查询模型

当模型准备好后,运行下面几行:

query_results = model.query(reference_data[0:10], k=10)
query_results.head()
复制代码

这样,你就将包含10张reference_data图片的数组传了进去,计算10张各自的类似度,而后展现query_results的前10行.

假设你想要看第10张的类似图片.首先,看看它是什么:

reference_data[9]['image'].show()
复制代码

因为图片的加载顺序是不肯定的,因此你的第10张图片极可能是不同的.重要的是输出应该像下面同样.

因此,运行这几行代码:

similar_rows = query_results[query_results['query_label'] == 9]['reference_label']
reference_data.filter_by(similar_rows, 'id').explore()
复制代码

目标图片实际上就是返回的第一张图片.其它的图片则展现那些类似的猫咪,或者只是摆放位置类似的猫咪.

恭喜你! 你如今已经用Python建立了一个图片类似度模型! 你的Mac也没有累爆炸.但愿,你也会尝试一下在你本身的数据上运行其它Turi Create示例.

关闭

退出登陆(Log out) jupyter 浏览窗口.

在终端(Terminal)窗口中,jupyter服务器正在运行,按Control-C-C来中止服务器.

若是你的命令行提示符(command line prompt)是以 (turienv) 启动的,输入下面指令来退出(exit):

source deactivate
复制代码

若是你真的不想再使用Anaconda了,输入下面命令:

rm -rf ~/anaconda3
复制代码

而后如何作?

完整版Turi Create notebook 和 iOS project放在本文资料中的finished文件夹中.在开头或结尾处能够下载.

如今你已经学会了在Create ML中用数据集进行实验,但愿你能继续学习Turi Create.

探索Create ML及其官方文档,同时也要花点时间浏览Turi Create User Guide,即便你不想使用Python.在Turi Create的How it works文档中,提供了大量的资料,而且无需深奥的数学知识.想要了解更多,参照他们的学术引用连接.

下面,是继续学习的一些资源:

咱们的教程

本文是咱们系列ML教程中的最新篇.其它还有:

ML社区

我但愿你喜欢本Create ML教程,若是你有任何问题或意见,请在下面评论.特别是记得告诉咱们你用Create ML和Turi Create作什么!

本文资料下载

相关文章
相关标签/搜索