用iOS的ML(机器学习)创建自己的AI App

2024-09-10T13:11:32+08:00 | 6分钟阅读 | 更新于 2024-09-10T13:11:32+08:00

Macro Zhao

用iOS的ML(机器学习)创建自己的AI App

@TOC

推荐超级课程:

在机器学习中,一切都始于模型,这是进行预测或识别的系统。教计算机学习涉及使用训练数据的机器学习算法进行学习。从训练中生成的输出通常称为机器学习模型。有不同类型的机器学习模型来解决同一个问题(例如对象识别),但使用不同的算法。神经网络 , 树集成 , 支持向量机(SVM) 是其中一些机器学习算法。

机器学习如同迭代过程

首先,我们尝试使用公共模型,但为了带来独特的市场价值和优势,我们希望我们的模型能胜过其他模型。我们在寻找的是所谓的ML反馈循环。谷歌在其ML功能中遵循以下模式:

  • 获取初始数据(一次性)
  • — — — — —
  • 对数据进行标记
  • 训练模型
  • 测试模型
  • 将模型投入生产运行
  • 获取新数据(并重复)

现在,对于一个移动应用程序,流程看起来像是:

在上图中,移动应用程序似乎使用了由ML创建的模型,但是它是如何工作的?是的,这里就是Core ML发挥作用的地方。

CoreML 的使用方法?

Core ML 是苹果的一种新的机器学习框架。它将机器学习模型带到苹果设备上,并让开发者能够轻松利用机器学习。我们可以使用苹果准备的十几种模型,或者从流行的ML框架(比如KerasCaffescikit-learn )中转换开源模型。

使用 CoreML 创建IOS应用程序的工作流程如下:

1- 您需要使用如Caffe、turi、Keras等ML框架创建一个数据模型。

2- 安装名为Core ML Tools的Python框架,将数据模型转换为Core ML格式。此转换的结果将是一个带有mlmodel扩展的文件。

3- 就是这样,您可以使用Core ML Tools创建的模型,并将其用于您的移动应用程序。

软件要求

为了训练模型,我们需要一个ML框架。最流行的是由Google开发的Tensorflow 。它受到社区最好的支持,并拥有大量的教程和开发者的关注。然而,当您深入了解时,您可能会最终发现自己在Github 问题页面 或堆栈溢出上处理一些数学问题或未记录的代码。与Web应用程序或移动开发相比,ML仍处于婴儿阶段,作为开发者,您需要准备好面对这些。建议您留出额外的时间来探索ML的神秘之处。开始使用高级库如Keras 或许更容易。您可以在文章结尾处查看一些训练教程的链接。

Tensorflow 和 Keras 是最常见的ML库之一

硬件

许多人说我们需要一个GPU来训练模型。对于需要高精度或进行一些网络架构调整的项目来说这是正确的。如果我们需要一个包含10个类别的图像分类器,那么我们可以利用迁移学习,在标准CPU上对我们的模型进行10分钟的微调。然而,对于真实的生产应用,我们通常需要GPU的性能。我们已经尝试了几家云服务提供商,亚马逊AWS的g2.2xlarge实例是一个不错的选择。

开始吧!!

到目前为止,您已经知道了使用机器学习创建IOS应用所需的必要工具,那就开始吧!

构建管道:

要使用Core ML工具,第一步是在您的Mac上安装Python。首先,下载Anaconda (选择Python 2.7版本)。Anaconda是一种在Mac上运行Python而不会出现问题的超级简单方式。安装Anaconda后,请转到终端并输入以下命令:

conda install python=2.7.13conda update python

接下来是创建一个虚拟环境。在虚拟环境中,您可以使用不同版本的Python或包来编写程序。要创建一个新的虚拟环境,请输入以下命令。

conda create --name handwriting

当终端提示您时,

proceed ([y]/n)?

输入“y”以确认。恭喜!现在,您有一个名为handwriting的虚拟环境!

要激活此环境,请使用:source activate handwriting

最后,请输入以下命令以安装Core ML工具和Kera的依赖项:

conda install pandas matplotlib jupyter notebook scipy opencv
pip install -U scikit-learn==0.15  
pip install -U coremltools  
pip install tensorflow==1.1  
pip install keras==2.0.6  
pip install h5py

设计和训练网络

在本文中,我将使用Kera作为我们示例的ML框架。

好的,您应该创建一个名为train.py的Python文件。在train.py中,插入以下代码:

  • 首先让我们导入一些必要的库,并确保Keras后端是TensorFlow:
import numpy as np
import keras
from keras.datasets import mnist
from keras.models import Sequential
from keras.layers import Dense, Dropout, Flatten
from keras.layers.convolutional import Conv2D, MaxPooling2D
from keras.utils import np_utils
# (确保)将后端设置为tensorflow
from keras import backend as K
K.set_image_dim_ordering('tf')
  • 接下来,让我们为训练和测试准备数据集。
# 定义一些变量
num_rows = 28
num_cols = 28
num_channels = 1
num_classes = 10
# 导入数据
(X_train, y_train), (X_test, y_test) = mnist.load_data()
X_train = X_train.reshape(X_train.shape[0], num_rows, num_cols, num_channels).astype(np.float32) / 255
X_test = X_test.reshape(X_test.shape[0], num_rows, num_cols, num_channels).astype(np.float32) / 255
y_train = np_utils.to_categorical(y_train)
y_test = np_utils.to_categorical(y_test)
  • 设计用于训练的模型。
# 模型
model = Sequential()
model.add(Conv2D(32, (5, 5), input_shape=(28, 28, 1), activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.5))
model.add(Conv2D(64, (3, 3), activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.2))
model.add(Conv2D(128, (1, 1), activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.2))
model.add(Flatten())
model.add(Dense(128, activation='relu'))
model.add(Dense(num_classes, activation='softmax'))
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
  • 训练模型。
# 训练
model.fit(X_train, y_train, validation_data=(X_test, y_test), epochs=10, batch_size=200, verbose=2)
  • 通过移除退出层准备模型进行推断。
# 准备模型以进行推断
for k in model.layers:
if type(k) is keras.layers.Dropout:
model.layers.remove(k)
  • 最后保存模型。
model.save('handWritten.h5')

然后,转到之前打开的终端,输入以下命令:

python train.py

它会创建一个名为handWritten.h5的经过训练的数据模型。

Keras 转 CoreML

要将您的模型从Keras转换为CoreML,我们需要执行更多的附加步骤。我们的深度学习模型需要一个28×28的归一化灰度图像,输出类别预测的概率。此外,让我们为我们的模型添加更多信息,如许可证、作者等。我们创建一个名为convert.py的文件,并插入以下代码:

import coremltools
output_labels = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']
scale = 1/255.
coreml_model = coremltools.converters.keras.convert('./handWritten.h5',
input_names='image',
image_input_names='image',
output_names='output',
class_labels= output_labels,
image_scale=scale)
coreml_model.author = 'Gerardo Lopez Falcon'
coreml_model.license = 'MIT'
coreml_model.short_description = 'Model to classify hand written digit'
coreml_model.input_description['image'] = 'Grayscale image of hand written digit'
coreml_model.output_description['output'] = 'Predicted digit'

coreml_model.save('handWritten.mlmodel')

回到终端,输入以下内容:python convert.py。它会为我们创建一个名为handWritten.mlmodel的文件(现在,我们可以在IOS应用程序中使用此文件)。

将模型集成到 Xcode 中

现在我们来到了将我们刚刚转换的模型集成到Xcode项目的最后一步。打开初始项目 ,根据您迄今为止所学的内容,我挑战您将Core ML模型集成到应用程序中。

第一步是将handWritten.mlmodel拖放到我们的Xcode项目中。确保目标成员资格的框已被选中。

现在,进入视图控制器下面,实例化IBOutlet,并从handWritten类型创建一个对象:

let model = handWritten()

然后,进入tappedDetect函数,插入以下内容:

let output = try? model.prediction(image: pixelBuffer!)

我们刚刚定义了常量prediction等于模型预测的数据。

这就是全部!构建并运行应用程序。这是在iPhone 7上测试时应用程序的结果。

结论

现在,您了解了如何转换数据模型,您可能会想知道从何处获取数据模型。通过简单的Google搜索,您就可以找到大量结果。您几乎可以找到几乎任何类别的数据模型,例如不同类型的汽车、植物、动物,甚至能告诉您与哪位名人最像的模型。以下是一些开始的地方!

如果找不到符合您需求的模型,您可能会想知道是否可以创建自己的数据模型。虽然可以做到,但这可能是困难的。如果您觉得您能应对这个挑战,我建议您从访问它们的主页开始,使用Scikit-Learn或TensorFlow。

感谢您分享这篇文章,如果您愿意与他人分享这篇文章,我会很感激。同时,我希望您点赞 :D

© 2011 - 2025 Macro Zhao的分享站

关于我

如遇到加载502错误,请尝试刷新😄

Hi,欢迎访问 Macro Zhao 的博客。Macro Zhao(或 Macro)是我在互联网上经常使用的名字。

我是一个热衷于技术探索和分享的IT工程师,在这里我会记录分享一些关于技术、工作和生活上的事情。

我的CSDN博客:
https://macro-zhao.blog.csdn.net/

欢迎你通过评论或者邮件与我交流。
Mail Me

推荐好玩(You'll Like)
  • AI 动·画
    • 这是一款有趣·免费的能让您画的画中的角色动起来的AI工具。
    • 支持几十种动作生成。
我的项目(My Projects)
  • 爱学习网

  • 小乙日语App

    • 这是一个帮助日语学习者学习日语的App。
      (当然初衷也是为了自用😄)
    • 界面干净,简洁,漂亮!
    • 其中包含 N1 + N2 的全部单词和语法。
    • 不需注册,更不需要订阅!完全免费!
  • 小乙日文阅读器

    • 词汇不够?照样能读日语名著!
    • 越读积累越多,积跬步致千里!
    • 哪里不会点哪里!妈妈再也不担心我读不了原版读物了!
赞助我(Sponsor Me)

如果你喜欢我的作品或者发现它们对你有所帮助,可以考虑给我买一杯咖啡 ☕️。这将激励我在未来创作和分享更多的项目和技术。🦾

👉 请我喝一杯咖啡

If you like my works or find them helpful, please consider buying me a cup of coffee ☕️. It inspires me to create and share more projects in the future. 🦾

👉 Buy me a coffee