现在tensorflow和mxnet很火,是否还有必要学习scikit-learn等框架

iOS 开发迎来机器学习的春天--- TensorFlow
招聘信息:
人工智能、机器学习都已走进了我们的日常,尤其是愈演愈热的大数据更是跟我们的生活息息相关,做&人工智能、数据挖掘的人在其他人眼中感觉是很高大上的,总有一种遥不可及的感觉,在我司也经常会听到数据科学部的同事们提到&机器学习、数据挖掘&之类的词。但这些名词真的跟我们移动开发就没直接关系了吗?&&作为移动开发者来说,无时无刻不被这些名词狠狠地敲打着脆弱的内心。???? ???? ???? 何时才能够将机器学习、深度学习应用在移动端,敲响移动端机器学习工业化的大门呢?想象一下,某一天你身处一个完全陌生的环境,周围都是陌生的事物,而运行在iPhone的某个APP却对这个环境了如指掌,你要做的就是打开这个APP,输入你需要了解的事物,iPhone告诉你这个事物的信息,你也就没有了陌生事物了。世界就在眼前!如下图:   上面物体的识别准确率还是蛮不错的,基本识别出了键盘(49%的概率)、鼠标(46%的概率)和水杯(24%的概率)。但是在某些事物的识别准确度方便却差强人意,比如下图:Phone 6被识别成了iPod(59%的概率),而iPod的却是不怎么敢认(10%的概率)。想想最崩溃的估计是iPhone 6了,身价直接被降了好几个等级。  上面的例子来自于TensorFlow官方iOSDemo,暂且不评述TensorFlow的识别准确度如何,毕竟它还年轻,但是仅凭其识别能力的体现,也给机器学习在移动端的运用带来了无限的可能。一、TensorFlow(简称TF)去年,Google资深系统专家Jeff Dean在湾区机器学习大会上隆重介绍了其第二代深度学习系统,一时间网络上针对TensorFlow的文章铺天盖地,、、等等文章,TensorFlow的燎原之火一直在燃烧蔓延着,其GitHub上的开源库在此文撰写时,也已经被star:27550,fork:11054了。???? ???? ???? ???? ????不负众望,Google一直宣称平台移植性非常好的TensorFlow,终于在日,发布0.9版本,宣布移动端支持。( 有墙???? ),同时也给出了移动端的,对于代码为生的程序员,身处大数据处理为主导的TalkingData,也小试身手了一把,下载TensorFlow源码,查看编译指南,开始跳坑、填坑之路,也成就了此篇拙文的产生。二、从TensorFlow到iOS静态库对于iOS平台下如何使用TensorFlow,TensorFlow给出了详细的编译脚本命令,详情请查看。第一步. 工具准备工欲善其事必先利其器,在开始编译工作之前,需要准备一些编译所必须的工具:: Mac os x 上包管理工具,具体使用方法可参考。$&/usr/bin/ruby&-e&"$(curl&-fsSL&/Homebrew/install/master/install)"Homebrew安装好之后,依次安装三个辅助性编译工具:$&brew&install&libtool&&&
$&brew&install&autoconf&&&
$&brew&install&automake三个工具的含义,请参考:第二步. 克隆TensorFlowGoogle以Apache 2.0开源协议将TensorFlow开源在GitHub上,我们可以直接使用TensorFlow源码。在任意你想存放TensorFlow源码的地方(建议不要放在桌面。^_^),clone项目。$&git&clone&/tensorflow/tensorflow第三步. 编译前准备在TensorFlow的tensorflow/contrib/makefile/目录下,有很多可使用的编译脚本,其中build_all_ios.sh脚本专门用来一键编译TensorFlow iOS静态库。虽然可以直接使用此脚本进行一键编译,但是因为有墙,某些依赖需要提前做处理。&1、下载protobuf& & & & protobuf 是编译前唯一需要特殊处理的依赖库,,下载protobuf之后,解压,备用。& 2、下载googlemock& & & & 虽然protobuf编译脚本autogen.sh中的googlemock链接地址/files/gmock-1.7.0.zip无法直接下载到,但是细心的人会发现,在浏览器中输入 & & & & & & & & &/地址后,会跳转到/google/googlemock地址,google在GiHub上的仓库地址。而GitHub上的仓库,我们可以直接的下载,克隆等。我们直接在GitHub上下载googlemock(点击下载),下载完成后,修改压缩包名字为gmock-1.7.0.zip,修改后将此压缩包移至上一步protobuf文件夹目录下,备用。&3、修改下载依赖脚本,移除protobuf的下载在tensorflow/contrib/makefile/目录下,download_dependencies.sh脚本用来下载相关依赖,打开此脚本文件,注释掉或者直接删掉git clone /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目录。(放心,你拷贝的速度会很快,不会影响编译的执行的。^_^)$&build_all_ios.sh一切准备就绪,接下来就是静静的等待编译完成了。在Mac编译的过程中,建议插上电源,最好不要让设备休眠断电,也最好不要去干别的东西,出去溜达一圈,回来后就看到战果了。编译完成之后,会在tensorflow/contrib/makefile/gen/目录下看到编译的结果,关于这些静态库该如何使用,自己的项目如何应用,请参考。三、遇到的问题1、被墙了,需要翻墙!(目前测试挂了VPN也没用),这也是上面编译前准备为什么要那么做的原因。curl:&(7)&Failed&to&connect&to&&port&443:&Operation&timed&out解决: 请参考 『第三步. 编译前准备』。2、没有Xcode。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 另一篇的技术博客四、参考链接
微信扫一扫
订阅每日移动开发及APP推广热点资讯公众号:CocoaChina
您还没有登录!请或
点击量6310点击量5802点击量3843点击量3827点击量3807点击量3777点击量3648点击量3064点击量3060
&2016 Chukong Technologies,Inc.
京公网安备89深度学习框架的比较(MXNet, Caffe, TensorFlow, Torch, Theano)
时间: 23:51:27
1. 基本概念
1.1 MXNet相关概念
深度学习目标:如何方便的神经网络,以及如何快速训练得到模型
CNN(卷积层):表达空间相关性(学表示)
RNN/LSTM:表达时间连续性(建模信号)
命令式编程(imperative programming):嵌入的较浅,其中每个语句都按原来的意思执行,如numpy和Torch就是属于这种
声明式语言(declarative programing):嵌入的很深,提供一整套针对具体应用的语言。即用户只需要声明要做什么,而具体执行则由系统完成。这类系统包括Caffe,Theano和TensorFlow。命令式编程显然更容易懂一些,更直观一些,但是声明式的更做优化,以及更利于做自动求导,所以都保留。
浅嵌入,命令式编程
深嵌入,声明式编程
如何执行a=b+1
需要b已经被赋值。立即执行,将结果保存在a中。
返回对应的计算图(computation graph),我们可以之后对b进行赋值,然后再执行加法运算
语义上容易理解,灵活,可以精确控制行为。通常可以无缝的和言交互,方便的利用主语言的各类算法,工具包,bug和性能调试器。
在真正开始计算的时候已经拿到了整个计算图,所以我们可以做一系列优化来提升性能。实现辅助函数也容易,例如对任何计算图都提供forward和backward函数,对计算图进行可视化,将图保存到硬盘和从硬盘读取。
实现统一的辅助函数和提供整体优化都很困难。
很多主语言的特性都用不上。某些在主语实现简单,但在这里却经常麻烦,例如if-else语句 。debug也不容易,例如监视一个复杂的计算图中的某个节点的中间结果并不简单。
目前现有的系统大部分都采用上两种编程模式的一种。与它们不同的是,MXNet尝试将两种模式无缝的结合起来。在命令式编程上MXNet提供张量运算,而声明式编程中MXNet支持符号表达式。用户可以自由的混合它们来快速实现自己的想法。例如我们可以用声明式编程来描述神经网络,并利用系统提供的自动求导来训练模型。另一方便,模型的迭代训练和更新模型法则中可能涉及大量的控制逻辑,因此我们可以用命令式编程来实现。同时我们用它来进行方便的和与主语言交互数据。
1.2 深度学习的关键特点
(1)层级抽象
(2)端到端学习
TensorFlow
C++/Lua/cuda
Python/c++/cuda
Python/Matlab
Python/R/Julia/Go
CPU/GPU/FPGA
CPU/GPU/Mobile
CPU/GPU/Mobile
Linux, OSX
Linux, OSX
C++/Python
Python/R/Julia/Go
符号张量图
符号张量图
$T.total > 0 && $T.page <= $T.pageNum}
{#foreach $T.data as r}
{$T.r.formt_tm}{#if $T.r.nickname}{#else}匿名{#/if}
{$T.r.content}
{#if $T.page > 1 && $T.pageNum > 1)
$T.s_num > 2}
{#for index = $T.s_num to $T.e_num}
$T.pageNum > $T.pageNavSize+ 2 && $T.s_num != $T.pageNum - $T.pageNavSize}
{#if $T.pageNum > 1}
{#if $T.pageNum != $T.page && $T.pageNum > 1}
<a href="javascript:void(0);" page="{$T.page 下一页
您的回应...
也许你感兴趣
(window.slotbydup=window.slotbydup || []).push({
id: '3465635',
container: s,
size: '120,240',
display: 'float'
(C)2012 本站提供的内容来源于广大网络用户,我们不保证内容的正确性。如果转载了您的内容,希望删除的请联系我们!}

我要回帖

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信