首页 iOS.& Swift Books 通过教程学习

4
使用python入门& Turi Create 由Audrey Tam撰写& Matthijs Hollemans

恭喜!如果您在此期限远远,您将为吸收追踪材料的斯特朗基金会开发出来。然而,在前一之前,我们需要在房间里解决10,000英镑的蛇... Python。直到这一点,你已经用Xcode和Swift做了,如果你真的很认真,让自己让自己看到学习七个。在这一章当中,

  • 您将学习如何从Python的生态系统进行数据科学和机器学习(毫升)建立和使用的工具。
  • 你会安装 蟒蛇,一个非常受欢迎的Python分发(和r)。
  • 您将使用终端命令创建ML环境,您将在本书中使用。
  • 最后,你会使用 jupyter笔记本,这是非常相似的斯威夫特游乐场,探索Python语言,数据科学图书馆,和 图里创造了,Apple的ML-AS-A-A-Service。

初学文件夹

本章的Starter文件夹包含:

  • A 笔记本 文件夹:示例Jupyter笔记本数据文件。
  • .yaml. 文件:用于预配置的导入环境,如果你想跳过了有关配置自己的环境。

Python

Python是用于数据科学和机器学习的主要编程语言。因此,有可用于Python社区来支持数据科学和机器学习开发工具万千。这些包括:

包裹和环境

python已安装在 苹果系统。但是,使用此安装可能会导致版本冲突,因为某些人使用Python 2.7,而其他人使用Python 3.x,这是相同语言的不兼容的分支。为了进一步复杂化东西,致力于机器学习项目需要集成众多软件库的正确版本,也称为“包”。

cond

数据科学界开发 cond to make life easier. Conda handles Python language versions, Python packages, and associated native libraries. It’s both an environment manager and a package manager. And, if you need a package that Conda doesn’t know about, you can use pip within a conda environment to grab the package.

安装Anaconda.

在浏览器中,导航到 //www.anaconda.com/download/#macos,并下载 64位命令行安装程序Python 3.7,如下图中突出显示:

sh Anaconda3-2019.07-MacOSX-x86_64.sh

conda --version
export PATH="/Users/<username>/anaconda3/bin":"${PATH}"

使用Anaconda Navigator.

蟒蛇附带了一个桌面GUI,您可以使用它来创建环境并在环境中安装包。但是,在本书中,您将从命令行执行所有内容。鉴于这一事实,值得越来越多的基本命令,即将在下一节中进行的。

有用的公园命令

如前所述,Conda是一个包装和环境管理系统。使用Python项目时,您通常会发现创建新环境非常有用,仅在编写代码之前安装您需要的包。在本节中,我们将探讨使用Python和Conda时重复使用许多有用的命令。

基本工作流程

创建 a new environment:

conda create -n <env name>
conda create -n <new env name> --clone <existing env name>
conda env create -f <.yaml file>
conda activate <env name>
(envname) $
conda install <pkg names>
conda install -n <env name> <pkg names>
pip install -r requirements.txt
jupyter notebook <directory path>
conda deactivate
conda remove -n <env name> --all
conda env remove -n <env name>

列表环境或包

列表 您创建的环境;其中一个*是目前活动的环境:

conda info --envs
conda env list
(activeenv) $ conda list
(activeenv) $ conda list <package name>
conda list -n <env name>
conda list -n <env name> <package name>

设置基础ML环境

在本节中,你会设置一些环境。如果你喜欢一个更快的启动,创建一个环境 myenv.yaml. 并跳到了 jupyter笔记本 部分。您可以通过导入来执行此操作 MLENV..yaml. 进入 蟒蛇 Navigator. 或通过从终端窗口运行以下命令:

conda env create -f starter/myenv.yaml

Python库数据科学

首先创建ML的自定义基础环境 numpy., 熊猫, matplotlib., scipy.克里克特 - 学习。你将在本书中使用这些数据的科学图书馆,但他们不会自动包含在新康达环境。

conda create -n mlenv python=3.7
conda activate mlenv
conda install numpy pandas matplotlib seaborn scipy scikit-learn scikit-image ipython jupyter

关于包版本的一个重要说明

技术动作快,还用Python的世界。机会是由你读这本书的时候,新版本可用于包装,我们正在使用。这是很可能这些新版本可能不兼容旧版本100%。

jupyter笔记本

随着Jupyter笔记本电脑,这是一个很多像斯威夫特游乐场,你可以编写和运行代码,你可以写和渲染降价来解释的代码。

开始jupyter.

终端,首先激活您的环境,然后启动Jupyter:

$ conda activate mlenv
$ jupyter notebook
/anaconda3/envs/mlenv/bin/jupyter_mac.command ; exit;

熊猫和matplotlib.

笔记本电脑有一个空的单元格。在该单元格中,键入以下行:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
data = pd.read_json('corpus.json', orient='records')
data.head()

?data.tail

data.tail(3)

data.sort_values(by='title')

authors = data.author
freq = authors.value_counts()
freq

plt.hist(freq, bins=100)
plt.show()

Python和Swift之间的差异

在本节中,您将花一些时间熟悉常见的Python语法。

if a == b:
    print('a and b are equal')
    if a > c:
        print('and a is also greater than c')
if authors is None:
    print('authors is None')
else:
    print('authors is not None')
authors is not None
def mysum(x, y):
    result = x + y
    return result

print(mysum(1, 3))
mylist = [1, 2]
mylist.append(3)
if mylist:
    print('mylist is not empty')

for value in mylist:
    print(value)

print('List length: %d' % len(mylist))
mylist is not empty
1
2
3
List length: 3
佛r value in mylist:
    print(value)

    print('List length: %d' % len(mylist))
1
List length: 3
2
List length: 3
3
List length: 3

用图里创造学习

Despite the difference in programming languages, deep down Turi Create shares a lot with Create ML, including transfer learning. With Turi Create v5, you can even do transfer learning with the same VisionFeaturePrint_Scene model that Create ML uses.

创建图里创建环境

First, you need a new environment with the turicreate package installed. You’ll clone the MLENV. 创造环境 Turienv., then you’ll install turicreate in the new environment. Conda doesn’t know about turicreate, so you’ll have to pip install it from within Terminal.

conda create -n turienv --clone mlenv
#
# To activate this environment, use:
# > conda activate turienv
#
# To deactivate an active environment, use:
# > conda deactivate
#
conda activate turienv
pip install -U turicreate==5.8

列出PIP安装的软件包

终端,使用此命令列出活动环境或特定包中的所有包:

conda list
conda list coremltools
# packages in environment at /Users/amt1/anaconda3/envs/mlenv:
#
# Name                    Version                   Build  Channel
coremltools               3.0                       <pip>

图里创造了笔记本

笔记:如果你跳过了人工环境设置和进口turienv.yaml到蟒蛇导航仪,使用Jupyter 发射 纽约州 蟒蛇 Navigator.主页 选项卡而不是下面的命令行,然后在浏览器中导航到 起动器/笔记本.

jupyter notebook <drag the starter/notebook folder in Finder to here>

import turicreate as tc
import matplotlib.pyplot as plt
train_data = tc.image_analysis.load_images("snacks/train",
                                           with_path=True)
len(train_data)
train_data.head()
sframe中的第一个行
mye tigmx nibb oc pzo pbtaru

train_data.explore()
探索培训图像
imnqugo yri jpuacadt ejigow

plt.imshow(train_data[0]["image"].pixel_data)
用matplotlib看图像
OQ Azupo Sadw Vesyvojppiz的Beoxerh

snacks/train/hot dog/8ace0d8a912ed2f6.jpg
# Grab the full path of the first training example
path = train_data[0]["path"]
print(path)

# Find the class label
import os
os.path.basename(os.path.split(path)[0])

获取课堂标签

OK, now you know how to extract the class name for a single image, but there are over 4,800 images in the dataset. As a Swift programmer, your initial instinct may be to use a 佛r loop, but if you’re really Swift-y, you’ll be itching to use a map function. SFrame has a handy apply() method that, like Swift’s map or 佛rEach, lets you apply a function to every row in the frame:

train_data["path"].apply(lambda path: ...do something with path...)
train_data["label"] = train_data["path"].apply(lambda path:
    os.path.basename(os.path.split(path)[0]))
SFRAME现在有一个新列
DNU DTKIXI XUH RUY O XIY Maganv

train_data["label"].summary()
标签列摘要
tafduxc xik qqe lakoy fotokh

train_data["label"].value_counts().print_rows(num_rows=20)

让我们做一些训练

Once you have your data in an SFrame, training a model with Turi Create takes only a single line of code (OK, it’s three lines, but only because we have to fit it on the page):

model = tc.image_classifier.create(train_data, target="label",
                                   model="VisionFeaturePrint_Scene",
                                   verbose=True, max_iterations=50)
model = tc.load_model("HealthySnacks.model")

验证

在15次迭代之后,验证精度接近训练准确度〜90%。在20次迭代中,训练准确性开始从验证验证中拉出,并播放到100%,而验证准确性实际上是下降......在这里发生大量的过度装备!如果验证准确性得到 更差 虽然训练准确性仍然不断改善,但你有一个过度装备的问题。

测试

运行这些命令以加载测试数据集并获取类标签:

test_data = tc.image_analysis.load_images("snacks/test", with_path=True)

test_data["label"] = test_data["path"].apply(lambda path:
       os.path.basename(os.path.split(path)[0]))

len(test_data)
metrics = model.evaluate(test_data)
print("Accuracy: ", metrics["accuracy"])
print("Precision: ", metrics["precision"])
print("Recall: ", metrics["recall"])
print("Confusion Matrix:\n", metrics["confusion_matrix"])
Accuracy:  0.8697478991596639
Precision:  0.8753552272362406
Recall:  0.8695450680272108
Confusion Matrix:
+--------------+-----------------+-------+
| target_label | predicted_label | count |
+--------------+-----------------+-------+
|  ice cream   |      candy      |   1   |
|    apple     |      banana     |   3   |
|    orange    |    pineapple    |   2   |
|    apple     |    strawberry   |   1   |
|  pineapple   |      banana     |   1   |
|  strawberry  |      salad      |   2   |
|   popcorn    |      waffle     |   1   |
|    carrot    |      salad      |   2   |
|    orange    |    watermelon   |   1   |
|   popcorn    |     popcorn     |   36  |
+--------------+-----------------+-------+
[107 rows x 3 columns]
Note: Only the head of the SFrame is printed.
You can use print_rows(num_rows=m, num_columns=n) to print more rows and columns.
混乱矩阵
Qte Funtoboud Fasmen.

出口到核心ML

在下一个细胞中, 转移进入 this command:

model
Class                                    : ImageClassifier

Schema
------
Number of classes                        : 20
Number of feature columns                : 1
Input image shape                        : (3, 299, 299)

Training summary
----------------
Number of examples                       : 4590
Training loss                            : 1.2978
Training time (sec)                      : 174.5081
model.save("HealthySnacks.model")
model.export_coreml("HealthySnacks.mlmodel")

关闭jupyter.

关闭jupyter,单击 登出 此浏览器窗口中的按钮,也在显示ML目录的窗口中。

取消激活活动环境

如果你被激活了 Turienv. 在终端命令行处,输入此命令以取消激活它:

conda deactivate

Docker.和Colab.

有两种其他高级工具,用于在Python中支持机器学习:Docker和Google Colaboratory。这些对于开发机器学习项目非常有用,但我们在本书中没有详细介绍它们。

Docker.

Docker.就像一个虚拟机,但更简单。 Docker是一个基于容器的系统,允许您重新使用和模块化可重新使用的环境,并且是有效地扩展服务和应用程序的基本构建块。安装Docker使您可以访问在Docker图像中分发的大量ML资源,因为Jupyter笔记本电脑 Hwchong / Kerastring4coreml. 或python项目这样 BAMOS / OPENFAFE. 面部识别模型。我们的开始机与Keras学习& Core ML (bit.ly/36cs6ku) tutorial builds and runs a keras-mnist Docker. image, and you can get comfortable using Docker with our Docker on macOS: Getting Started tutorial here: bit.ly/2os0kny..

搜索Docker集线器用于图像分类器
Headnc Gipziz den Yeb Odeci Tbugkavaog

谷歌Colaboratory.

谷歌研究的崇高崇拜者 colab.research.google.com. 是在浏览器中运行的Jupyter记事本环境。它配备了许多你需要,已经安装在机器学习库。它最大的特点是,你可以设置 运行时类型 笔记本 GPU. 免费使用Google的GPU。它甚至可以让你使用谷歌 TPUS. (张量加工单位)。

from google.colab import drive
drive.mount('/content/drive/')

!ls "/content/drive/My Drive/machine-learning/snacks"

关键点

  • 熟悉Python。它在机器学习领域与学术界的广泛采用意味着如果您想及时了解机器学习,您必须登上船。
  • 熟悉公园。它将使Python合作更加愉快。它允许您在受控环境中尝试Python库,而不会损坏任何现有环境。
  • 熟悉Jupyter笔记本电脑。像斯威夫特游乐场,它们提供了快速测试与康达结合使用尤其是当所有的东西的Python的一种手段。

然后去哪儿?

你所有的设置,继续学习的机器学习使用Python工具图像分类。接下来的章节将介绍几个图里创建的招数。在这之后,您就可以学习如何创建Keras自己深深的学习模式。

有一个技术问题?想报告一个错误吗? 您可以向官方书籍论坛中的书籍作者提出问题和报告错误 这里.

有反馈分享在线阅读体验吗? 如果您对UI,UX,高亮反馈,或者我们的在线读者的其他功能,您可以付款给设计团队与下面的表格:

© 2021 Razeware LLC

您可以免费读取,本章的部分显示为 混淆了 文本。解开这本书,我们的书籍和视频的整个目录,具有raywenderlich.com专业订阅。

现在解锁

要突出或记笔记,您需要在订阅中拥有这本书或自行购买。