Core ML 文档翻译
概览
借助 Core ML,您可以将已训练好的机器学习模型,集成到自己的应用当中。
所谓已训练模型 (trained model),指的是对一组训练数据应用了某个机器学习算法后,所生成的一组结果。举个例子,通过某个地区的历史房价来训练出一个模型,那么只要指定房间有几卧几卫,就有可能对未来该房间的房价做出预测。
Core ML 是领域特定 (domain-specific) 框架和功能的基础所在。Core ML 为 Vision 提供了图像处理的支持,为 Foundation 提供了自然语言处理的支持(例如 NSLinguisticTagger 类),为 GameplayKit 提供了对学习决策树 (learned decision tree) 进行分析的支持。Core ML 本身是基于底层基本类型而建立的,包括 Accelerate、BNNS 以及 Metal Performance Shaders 等。
Core ML 针对设备的性能进行了优化,最大限度地减少内存占用和功耗。通过在设备上运行的严格要求,不仅保护了用户数据隐私,而且当网络连接丢失的时候,还能够保证应用能正常工作和响应。
获取 Core ML 模型
获取 Core ML 模型,以便能在您的应用当中使用。
Core ML 支持多种机器学习模型,其中包括了神经网络 (Neural Network)、组合树 (Tree Ensemble)、支持向量机 (Support Vector Machine) 以及广义线性模型 (Generalized Linear Model)。Core ML 的运行需要使用 Core ML 模型格式(也就是以 .mlmodel 扩展名结尾的模型)。
Apple 提供了一些常见的开源模型供大家使用,这些模型已经使用了 Core ML 模型格式。您可以自行下载这些模型,然后就可以开始在应用中使用它们了。此外,其他的研究机构和大学都发布了不少机器学习模型和训练数据,这些往往都不是以 Core ML 模型格式发布出来的。如果您打算使用这些模型的话,需要对它们进行转换,具体内容详见「将已训练模型转换为 Core ML」。
将 Core ML 模型集成到应用中
向应用中添加一个简单的模型,然后向模型中传入输入数据,并对模型的预测值进行处理。
点击此处下载示例应用。
概述
本示例应用使用了一个已训练模型 MarsHabitatPricer.mlmodel,用以预测火星上的殖民地价值。
将模型添加到 Xcode 项目中
要想将模型添加到 Xcode 项目当中,只需要将模型拖曳进项目导航器 (project navigator) 当中即可。
您可以通过在 Xcode 中打开这个模型,从而来查看它的相关信息,其中包括有模型类型以及其预期输入和输出。模型的输入为太阳能板和温室的数量,以及殖民地的规模大小(以英亩为单位)。模型的输出则是对这个殖民地价值的预测。
用代码创建模型
Xcode 同样也会使用模型的输入输出信息,来自动为模型生成一个自定义的编程接口,从而就可以在代码当中与模型进行交互。对于这个 MarsHabitatPricer.mlmodel 而言,Xcode 会生成相应的接口,来分别表示模型本身(MarsHabitatPricer)、模型输入 (MarsHabitatPricerInput) 以及模型输出 (MarsHabitatPricerOutput)。
使用所生成的 MarsHabitatPricer 类的构造器,便可以创建这个模型:
let model = MarsHabitatPricer()
获取输入值以传递给模型
示例应用使用了 UIPickerView,以便从用户那里获取模型的输入值。
func selectedRow(for feature: Feature) -> Int {
return pickerView.selectedRow(inComponent: feature.rawValue)
}
let solarPanels = pickerDataSource.value(for: selectedRow(for: .solarPanels), feature: .solarPanels)
let greenhouses = pickerDataSource.value(for: selectedRow(for: .greenhouses), feature: .greenhouses)
let size = pickerDataSource.value(for: selectedRow(for: .size), feature: .size)
使用模型来进行预测
MarsHabitatPricer 类会生成一个名为 prediction(solarPanels:greenhouses:size:) 方法,从而就可以根据模型的输入值来预测价值,在本例当中,输入值为太阳能板的数量、温室的数量以及殖民地的规模大小(以英亩为单位)。这个方法的结果为一个 MarsHabitatPricerOutput 实例,这里我们将其取名为 marsHabitatPricerOutput。
guard let marsHabitatPricerOutput = try? model.prediction(solarPanels: solarPanels, greenhouses: greenhouses, size: size) else {
fatalError("Unexpected runtime error.")
}
通过读取 marsHabitatPricerOutput 的 price 属性,就可以获取所预测的价值,然后就可以在应用的 UI 当中对这个结果进行展示。
let price = marsHabitatPricerOutput.price
priceLabel.text = priceFormatter.string(for: price)
注意
所生成的 prediction(solarPanels:greenhouses:size:) 方法会抛出异常。在使用 Core ML 的时候,您大多数时候遇到的错误通常是:传递给方法的输入数据类型与模型预期的输入类型不同——例如,用错误格式表示的图片类型。在示例应用当中,预期的输入类型为 Double。所有的类型不匹配错误都会在编译时被捕获,如果遇到了某种错误,那么示例应用就会弹出一个致命错误。
构建并运行 Core ML 应用
Xcode 会将 Core ML 模型编译到资源当中,从而进行优化并能够在设备上运行。优化过的模型表征会包含在您的应用程序包当中,在应用在设备上运行的时候,就可以用之来进行预测。
将已训练模型转换为 Core ML
将由第三方机器学习工具所创建的已训练模型,转换为 Core ML 模型格式。
概述
如果您已经使用了第三方机器学习工具来创建和训练模型,只要这个工具是受支持的,那么就可以使用 Core ML Tools 来将这些模型转换为 Core ML 模型格式。表 1 列出了我们支持的模型和第三方工具。
注意
Core ML Tools 是一个 Python 包 (coremltools),并挂载在 Python Package Index (PyPI) 上。要了解关于 Python 包的更多信息,请参阅 Python Packaging User Guide。
模型转换
您可以使用 Core ML 转换器,并根据对应的模型第三方工具,来对模型进行转换。通过调用转换器的 convert 方法,然后再将结果保存为 Core ML 模型格式 (.mlmodel)。
例如,如果您的模型是使用 Caffe 来创建的,您可以将 Caffe 模型 (.caffemodel) 传递给 coremltools.converters.caffe.convert 方法。
import coremltools
coreml_model = coremltools.converters.caffe.convert('my_caffe_model.caffemodel')
然后将结果保存为 Core ML 模型格式。
coreml_model.save('my_model.mlmodel')
根据您模型的不同,您可能会需要更新输入、输出以及相关的参数标签,或者您还可能会需要声明图片名称、类型以及格式。转换工具内置了更详细的文档,因为可用的选项因工具而异。
或者,还可以编写自定义的转换工具
如果您需要转换的格式不在表 1 当中,那么您可以创建自己的转换工具。
编写自定义的转换工具,包括了将模型的输入、输出和架构表示转换为 Core ML 模型格式。您可以通过将每一层模型架构,以及层之间的连接关系进行定义,来实现这个操作。您可以通过 Core ML Tools 所提供的转换工具作为参考;它们演示了如何将各种第三方工具创建的模型类型,转换为 Core ML 模型格式。
注意
Core ML 模型格式由一系列 Protocol Buffer 文件所定义,具体信息请参见 Core ML Model Specification。
Core ML API
直接使用 Core ML API,从而支持自定义工作流以及更为高级的用例。
在绝大多数情况下,您只需要与模型动态生成的接口进行交互即可,也就是说当您将模型添加到 Xcode 项目当中的时候,这个接口就由 Xcode 自动创建完毕了。您可以直接使用 Core ML API,以便支持自定义工作流或者更为高级的用例。举个例子,如果您需要将输入数据异步收集到自定义结构体,从而来执行预测的话,那么您就可以让这个结构体实现 MLFeatureProvider 协议,从而来为模型提供输入功能。
具体的 API 列表请参见 Core ML API。
相关文章:

jquery radio 取值
网上流行的说法就是 $(input[nameaaa][checked]).val()能取到选中项的value,但我测试后发现只在IE下有效,在firefox和Chrome中不论选中哪一项,或者不选,取到的值都是第一项的value正确做法应该是 $("input[nameaaa]:checked&…

Spring Boot与ActiveMQ的集成
1、ActiveMQ软见得安装配置 1.1、上传软件包并解压 1.2、配置并启动 1.3、浏览器验证 2、添加ActiveMQ起步依赖; 3、创建消息队列对象,在Application.java中编写一个创建消息队列的方法,其代码展示如下; 4、创建消息生产者&#…
iOS图片精确提取主色调算法iOS-Palette(附源码)
源码可见:[直接点击] 1.背景 图像提取主色调来增强浸入式交互体验的场景越来越常见,如知乎网页版的个人主页,Instagram的图片色调筛选。那如何去获得一张照片的主色调呢?Google在Android.support.v7里,给出了一个叫做Palette(调色…

jQuery UI 之 LigerUI 快速入门
LigerUI 快速开发UI框架 LigerUI 是基于jQuery 的UI框架,其核心设计目标是快速开发、使用简单、功能强大、轻量级、易扩展。简单而又强大,致力于快速打造Web前端界面解决方案,可以应用于.net,jsp,php等等web服务器环境。 LigerUI有如下主要特…

HTML5标签学习之~~~
<article> 标签 article 字面意思为“文章”。在web页面中表现为独立的内容,如一篇新闻,一篇评论,一段名言,一段联系方式。这其中包括两方面,一为整个页面的主旨内容,另外就是一些辅助内容。<arti…

将Spring Boot项目打包成jar包war包
任务一:将Spring Boot项目打包成jar包 1、在pom.xml文件中添加依赖 2、通过cmd命令行来进行打包jar包(首先进入项目的目录中) 3、进入项目中的target目录下查看包 4、使用命令执行jar包; 5、浏览器查看输出结果 任务二࿱…
手把手教你在应用里用上iOS机器学习框架Core ML
2017-06-10 Cocoa开发者社区2017年的WWDC上,苹果发布了Core ML这个机器学习框架。现在,开发者可以轻松的使用Core ML把机器学习功能集成到自己的应用里,让应用变得更加智能,给用户更牛逼的体验。 Core ML是做什么的 我们知道&…

Linux服务器安装JDK、Tomcat配置web网站
安装JDK cd /usr/java/jdk【打开目录】 tar -xvzf jdk-7u79-linux-x64.gz【解压安装包】 vi ~/.bashrc【编辑环境变量】############################export JAVA_HOME/usr/java/jdk/jdk1.7.0_79export JAVA_BIN$JAVA_HOME/binexport JAVA_LIB$JAVA_HOME/libexport CLASSPATH.…

sql help cs
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Configuration;using System.Data;using System.Data.SqlClient;using System.Collections; /// <summary> /// SQLHelper 的摘要描述 /// </summary>publ…

Spring Cloud应用开发(一:使用Eureka注册服务)
1、搭建maven父工程; 注:在MyEclipse中,创建一个Maven父工程cloud,并在工程的pom.xml中添加Spring Cloud的版本依赖等信息。 2、搭建服务端工程。 注:在父工程cloud中,创建Maven子模块ms-spring-eureka-s…
SRWebSocket源码浅析(上)
2017-06-12 涂耀辉 Cocoa开发者社区一. 前言: WebSocket协议是基于TCP的一种新的网络协议。它实现了浏览器与服务器全双工(full-duplex)通信——可以通俗的解释为服务器主动发送信息给客户端。 区别于MQTT、XMPP等聊天的应用层协议,它是一个传输通讯协…

Mason 简单笔记
Mason的对象 ------------------------------- Request对象 Mason有两个全局预处理对象叫做:$r和$m $r是mod_perl的请求对象,它提供了Perl的API来执行Apache的请求。 $r->;uri #获得用户请求的地址 $r->;content_type #获得…

多级页表如何节省内存
在谈到多级页表的优势的时候,很多地方都是这么说的:32位地址空间的分页系统,如果页面大小为4KB,则每个进程可达1M个页,假设每个页表项占用4个字节,这样每个进程仅仅页表项就占用了4MB连续的内存空间。 那么…

Spring Cloud应用开发(二:实现服务间的调用)
1、搭建订单服务工程。 注:在父工程cloud中,创建Maven子模块ms-spring-eureka-server; 1.1、添加依赖,在pom文件中添加Eureka依赖; 1.2、写配置文件,在配置文件中添加Eureka服务实例的端口号、服务端地址等…

webSocket详解
前言 本文会用实例的方式,将iOS各种IM的方案都简单的实现一遍。并且提供一些选型、实现细节以及优化的建议。 注:文中的所有的代码示例,在github中都有demo: iOS即时通讯,从入门到“放弃”?(demo) 可以打…

2013多校第三场
hdu 4629 题意:给你n个三角形,问覆盖1~n次的面积各是多少,n < 50; 分析:取出所有端点和交点的x坐标,排序,然后对于每一段xi~xi1的范围的线段都是不相交的,所以组成的 面积要么是三角形&#…

React+Reflux博客实践
年初用ReactExpressMongodb写的一个简单的博客。分享给各位朋友参考。 前端:ReactReact RouterRefluxReact-BootstrapWebpack后端:Express(Node.js)Ejs(Index)Mongoose(mongodb) 博客Demo地址:http://itdotaerblog.herokuapp.comGithub Addre…

Spring Cloud应用开发(三:客户端的负载均衡)
1、Ribbon的使用 注:在石榴啊RestTemplate的方法上添加LoadBalanced注解,并在其执行方法中使用服务实例的名称即可; 1.1、添加LoadBalanced注解,在ms-spring-eureka-user工程引导类中的RestTemplate()方法…

SRWebSocket源码浅析(下)
接上文) 四. 接着来讲讲数据的读和写: 当建立连接成功后,就会循环调用这么一个方法: //读取http头部 - (void)_readHTTPHeader; { if (_receivedHTTPHeaders NULL) { //序列化的http消息 _receivedHTTPHeaders CFHTTPMessageCre…

(IOS)签名Demo
思路是将每一次按下屏幕的touch move时的点存到一个数组里,即一个数组相当于一个笔画;再将该代表笔画的数组保存到一个大数组中,每组每次touch的移动都历遍大数组和笔画数组,将点于点之间连接起来。 #import <UIKit/UIKit.h>…

debug运行可以,release运行报错的原因及修改方法
通常我们开发的程序有2种模式:Debug模式和Release模式在Debug模式下,编译器会记录很多调试信息,也可以加入很多测试代码,方便我们程序员测试,以及出现bug时的分析解决Release模式下,就没有上述那些调试信息,而且编译器也会自动优化一些代码,这样生成的程序性能是最优的,但是如果…

Spring Cloud应用开发(四:服务容错保护)
1、Spring Cloud Hystrix的使用 1.1、创建microservice-eureka-user-hystrix工程,并在其pom.xml中引入eureka和hystrix的依赖; 1.2、编写配置文件。在配置文件中添加Eureka服务实例的端口号,服务端地址等; 1.3、在工程主类Applic…

计量注册师考试一些关于期限、时间、机构的总结
1:有效期: 认证5年,基准5年,标准4年,机构授权3年,注册计量师注册证3年,制造、修理许可证3年。 提前量:标准考核提前6个月,注册计量师在有效期满前30工作日内提出申请延续…
TinyCrayon-iOS-SDK:强大到使人惊讶的 Mask 及切图工具库
原文链接:https://github.com/TinyCrayon/TinyCrayon-iOS-SDKTinyCrayon-iOS-SDK:强大到使人惊讶的 Mask 及切图工具库。# 为开源点赞# —— 由SwiftLanguage分享A smart and easy-to-use image masking and cutout SDK for mobile apps. TinyCrayon SDK…

Android之自定义AlertDialog无法监听控件
参考:http://www.cnblogs.com/511mr/archive/2011/10/21/2220253.html 要做一个自定义的弹出框,以前都是用一个Activity来实现,总觉得不是很好看,弹出的框有时候感觉有点大,所以上网查资料说,可以给AlertDi…

Spring Cloud应用开发(五:API网关服务)
1、使用Zuul构建API网关服务; 注:本服务涉及到3个工程,起作用分别如下: ms-spring-eureka-server工程:服务注册中心,端口为8761。ms-spring-eureka-order工程:服务提供者,需要启动…

多态---父指针指向子类对象(父类引用指向子类对象)
我们都知道,面向对象程序设计中的类有三大特性:继承,封装,多态,这个也是介绍类的时候,必须提到的话题,那么今天就来看一下OC中类的三大特性: 一、封装 封装就是对类中的一些字段&…
ARKit从入门到精通-ARKit工作原理及流程介绍
2017-06-15 坤小 Cocoa开发者社区转载请注明出处:http://www.jianshu.com/p/0492c7122d2f 1.1-写在前面的话 1.2-ARKit与SceneKit的关系 1.3-ARKit工作原理 1.3.1-ARSCNView与ARSession 1.3.2-ARWorldTrackingSessionConfiguration与ARFrame 1.4-ARKit工作完整流程 1…

【C语言也能干大事】第五讲 组合框控件,下拉列表
获得组合框控件的句柄HWND hwndCombo1 GetDlgItem(hwnd, IDC_COMBO1); 确定目前选项的索引 int curSel ComboBox_GetCurSel(hwndCombo1); 删除项 ComboBox_DeleteString(hwndCombo1, 2); 取得有多少项int getCount ComboBox_GetCount(hwndCombo1);TCHAR getcount[256];itoa(…

Spring Cloud应用开发(六:使用本地存储方式实现分布式配置管理 )
1、搭建Config Server; 1.1、创建配置中心工程microservice-config-server,并在其pom.xml中引入Config Server的依赖; 1.2、编写配置文件application.yml,添加服务端口号和存储属性等信息; 1.3、在scr/main/resources…