• iOS机器学习-TensorFlow


    人工智能、机器学习都已走进了我们的日常,尤其是愈演愈热的大数据更是跟我们的生活息息相关,做 人工智能、数据挖掘的人在其他人眼中感觉是很高大上的,总有一种遥不可及的感觉,在我司也经常会听到数据科学部的同事们提到 机器学习、数据挖掘 之类的词。但这些名词真的跟我们移动开发就没直接关系了吗?  
    作为移动开发者来说,无时无刻不被这些名词狠狠地敲打着脆弱的内心。???? ???? ???? 何时才能够将机器学习、深度学习应用在移动端,敲响移动端机器学习工业化的大门呢?

    想象一下,某一天你身处一个完全陌生的环境,周围都是陌生的事物,而运行在iPhone的某个APP却对这个环境了如指掌,你要做的就是打开这个APP,输入你需要了解的事物,iPhone告诉你这个事物的信息,你也就没有了陌生事物了。世界就在眼前!

    如下图:   

    image02.png

    上面物体的识别准确率还是蛮不错的,基本识别出了键盘(49%的概率)、鼠标(46%的概率)和水杯(24%的概率)。

    但是在某些事物的识别准确度方便却差强人意,比如下图:

    image01.png

    Phone 6被识别成了iPod(59%的概率),而iPod的却是不怎么敢认(10%的概率)。想想最崩溃的估计是iPhone 6了,身价直接被降了好几个等级。

      

    wq.jpg

    上面的例子来自于TensorFlow官方iOSDemo,暂且不评述TensorFlow的识别准确度如何,毕竟它还年轻,但是仅凭其识别能力的体现,也给机器学习在移动端的运用带来了无限的可能。

    一、TensorFlow(简称TF)

    去年,Google资深系统专家Jeff Dean在湾区机器学习大会上隆重介绍了其第二代深度学习系统TensorFlow,一时间网络上针对TensorFlow的文章铺天盖地,揭秘TensorFlow:Google开源到底开的是什么?Google开源TensorFlow系统,这背后都有什么门道?如何评价Google发布的第二代深度学习系统TensorFlow?等等文章,TensorFlow的燎原之火一直在燃烧蔓延着,其GitHub上的开源库在此文撰写时,也已经被star:27550,fork:11054了。???? ???? ???? ???? ????

    不负众望,Google一直宣称平台移植性非常好的TensorFlow,终于在2016年6月27日,发布0.9版本,宣布移动端支持。TensorFlow v0.9 now available with improved mobile support( 有墙???? ),同时也给出了移动端的Demo,对于代码为生的程序员,身处大数据处理为主导的TalkingData,也小试身手了一把,下载TensorFlow源码,查看编译指南,开始跳坑、填坑之路,也成就了此篇拙文的产生。

    二、从TensorFlow到iOS静态库

    对于iOS平台下如何使用TensorFlow,TensorFlow给出了详细的编译脚本命令,详情请查看官方文档的命令

    第一步. 工具准备

    工欲善其事必先利其器,在开始编译工作之前,需要准备一些编译所必须的工具:

    Homebrew: Mac os x 上包管理工具,具体使用方法可参考Doc

    1

    Homebrew安装好之后,依次安装三个辅助性编译工具:

    1
    2
    3
    $ brew install libtool   
    $ brew install autoconf   
    $ brew install automake

    三个工具的含义,请参考:https://en.wikipedia.org/wiki/GNU_Libtool

    第二步. 克隆TensorFlow

    Google以Apache 2.0开源协议将TensorFlow开源在GitHub上,我们可以直接使用TensorFlow源码。

    在任意你想存放TensorFlow源码的地方(建议不要放在桌面。^_^),clone项目。

    第三步. 编译前准备

    在TensorFlow的tensorflow/contrib/makefile/目录下,有很多可使用的编译脚本,其中build_all_ios.sh脚本专门用来一键编译TensorFlow iOS静态库。虽然可以直接使用此脚本进行一键编译,但是因为有墙,某些依赖需要提前做处理。

     1、下载protobuf

            protobuf 是编译前唯一需要特殊处理的依赖库,点击下载,下载protobuf之后,解压,备用。

      2、下载googlemock

            虽然protobuf编译脚本autogen.sh中的googlemock链接地址https://googlemock.googlecode.com/files/gmock-1.7.0.zip无法直接下载到,但是细心的人会发现,在浏览器中输入                  https://googlemock.googlecode.com/地址后,会跳转到https://github.com/google/googlemock地址,google在GiHub上的仓库地址。而GitHub上的仓库,我们可以直接的下载,克隆等。

    我们直接在GitHub上下载googlemock(点击下载),下载完成后,修改压缩包名字为gmock-1.7.0.zip,修改后将此压缩包移至上一步protobuf文件夹目录下,备用。

     3、修改下载依赖脚本,移除protobuf的下载

    在tensorflow/contrib/makefile/目录下,download_dependencies.sh脚本用来下载相关依赖,打开此脚本文件,注释掉或者直接删掉git clone https://github.com/google/protobuf.git ${DOWNLOADS_DIR}/protobuf部分,目的是不让脚本去下载protobuf。

    上面三步准备好后,接下来就进入静态库编译了。

    第四步. 一键编译

    前面已经知道在TensorFlow文件夹tensorflow/contrib/makefile/目录下的build_all_ios.sh脚本是用来编译iOS静态库的脚本,因此可以直接执行此脚本,开始静态库的编译工作了。

    但是有一个问题大家可能会发现,由于编译TensorFlow需要用到protobuf,但是protobuf使我们自己手动下载的,该怎么让手动下载的protobuf能够直接让build_all_ios.sh脚本使用呢?

    答案是复制、粘贴。可能有些low,但是有效。执行命令 build_all_ios.sh之后,立即把之前手动下载的protobuf文件夹拷贝进tensorflow/contrib/makefile/downloads目录。(放心,你拷贝的速度会很快,不会影响编译的执行的。^_^)

    1
    $ build_all_ios.sh

    一切准备就绪,接下来就是静静的等待编译完成了。在Mac编译的过程中,建议插上电源,最好不要让设备休眠断电,也最好不要去干别的东西,出去溜达一圈,回来后就看到战果了。

    编译完成之后,会在tensorflow/contrib/makefile/gen/目录下看到编译的结果,关于这些静态库该如何使用,自己的项目如何应用,请参考TensorFlow iOS Examples

    三、遇到的问题

    1、googlecode.com被墙了,需要翻墙!(目前测试挂了VPN也没用),这也是上面编译前准备为什么要那么做的原因。

    1
    curl: (7) Failed to connect to googlemock.googlecode.com port 443: Operation timed out

    解决: 请参考 『第三步. 编译前准备』。

    2、没有Xcode。

    1
    2
    3
    4
    xcrun: error: SDK "iphoneos" cannot be located
    xcrun: error: SDK "iphoneos" cannot be located
    xcrun: error: unable to lookup item 'PlatformPath' in SDK 'iphoneos'
    + IPHONEOS_PLATFORM=

    解决:安装Xcode,从上面报错的命令中可以看到,在编译静态库的过程中使用了xcrun,而此命令是xCode本身具有的能力。

    3、你的Xcode版本不是7.3或以后,或者你有多个Xcode,而默认的安装路径版本不是7.3或以后。

    ``` error: Xcode 7.3.0 or later is required.

    exit 1 ```/

    解决:更新Xcode至最新版本,并且保证默认路径下是最新/版本。

    如果Xcode是7.3,并且没有条件更新Xcode,你可以修改tensorflow/contrib/makefile/compile_ios_tensorflow.sh 里的REQUIRED_XCODE_VERSION=7.3.0,为REQUIRED_XCODE_VERSION=7.3。(这样修改,目前还不确定会不会带来一些其他影响,最好是升级你的Xcode)

    想了解TensorFlow在Android平台的使用可以,看看 TalkingData SDK Team 另一篇的技术博客Tensorflow 在 Android 平台的移植

    四、参考链接

  • 相关阅读:
    Redis 查看、删除keys
    gitlab 备份和恢复
    gitlab的搭建
    certbot 域名续期及证书查看
    晴天(周杰伦)
    SSH Permission denied (publickey,gssapi-keyex,gssapi-with-mic)
    jenkins miaration section 1
    jenkins 忘记管理员密码
    Yangk's-树状数组 模板
    codeforces-977F-Consecutive Subsequence【动态规划】
  • 原文地址:https://www.cnblogs.com/oc-bowen/p/6092694.html
Copyright © 2020-2023  润新知