深度学习_工具

1. 引入

深度学习的工具有很多Tensorflow, Theano, Caffe, Keras, MXNet, Scikit-learn…有用c++写的,有用Python写的,还有R的,Java的,从哪里入手呢?
先看看最热门的Tensorflow,它是谷歌研发的人工智能学习系统,主要优点是分布式计算,特别是在多GPU的环境中。Theano也是比较低级的库,一般单机使用.什么是低级库?就像炒回锅肉不用从杀猪开始,杀猪就是比较低级的工作,已经有人帮你做好了,像Keras这种较上层的工具,它把 Theano和TensorFlow包装成了更具人性化的API。至于是选择低级工具,还是上层工具,主要取决于您的目标是开肉联厂还是开饭馆.

图片.png

2. 工具简介

Caffe是c++写的库,是较低层级的库,它是个老牌的工具,工作稳定,性能也好,还提供绑定到Python上的编程语言,但相对没有Python类工具灵活.
Theano是一个低级库,透明地使用GPU来完成数学计算.也是一个老牌的工具,工作比较稳定,只支持单机,可供Keras调用.
TensorFlow也是个低级的库,由Google发布,其的主要优点是分布式计算,特别是在多GPU的环境中,可供Keras调用.
CNTK也是个低级的库,微软发布,可供Keras调用.
MXNet还是一个低级库,由C++实现的,同时提供了python,lua,R,和js等多种语言接口,优点是分布式计算,它支持多个CPU / GPU分配训练网络,可供Keras调用.
Keras用得比较多,它把 Theano,TensorFlow,MXNet,CNTK包装成了更具人性化的API(低级的库想做完整的解决方案,还是要自己写很多代码),可供快速入门,但速度相对慢一些,在设计复杂算法时,也相对受限.
Lasagne是基于Theano的,用于构建和训练网络的轻量级库。Lasagne的功能是Theano的低级编程和Keras的高级抽象之间的一个折中。
NoLearn把Lasagne封装成了更具人性化的API(就如同Keras把 Theano和TensorFlow封装一样),此外,NoLearn中所有的代码都是与scikit-learn兼容的.
Scikit-learn是Python中常用的机器学习库,除了深度学习也提供很多浅层模型,深度学习不是它的重点.
Torch是由lua语言编写的深度学习库.
这里所谓的高级/低级都是相对而言的,高级只是相对简单一些.在算法的使用层面,对上层调用比较多,但会牺牲一些效率,限制也比较多.在算法改进层面,更多用到低级库.
接口怎么调都不过都是调库而已.关键还是看如何设计神经网络的结构,以及它背后的数学原理,所以说深度学习主要比拼的还是"内功".

3. 工具选择

上述工具很多是Python写的,或者有Python的接口,建议在Python层面调用.
作为入门,建议选择Keras,基于以下原因:代码简单,资料多,可将Theano,Tensorflow等作为后端(只要安装好后端工具,就可以使用它了,无需了解具体用法;有一定扩展性(可用theano或tensorflow的语句来写扩展功能并和keras结合使用).最主要的还是容易上手.

4. Keras&Theano&Tensorflow简单安装

1) 安装软件

以下为最简单地安装方法,此文及下文中环境默认为ubuntu

$ sudo pip install tensorflow
$ sudo pip install theano
$ sudo pip install keras

2) 安装例程

学习keras最好从它的例程开始,需要下载keras源码

$ git clone https://github.com/fchollet/keras.git

例程在keras/examples目录下
推荐mnist_*例程,它分别使用了CNN,RNN,GAN等方法实现了手写数字的识别,可以先运行一下看看效果.代码很简单,不过是看代码时,就会发现,虽然只有几个语句,几个参数,但还是不明白,为什么要这么写?和那些讲原理的书有点对不上.因此,建议先自己写个简单神经网络具体实现(不是调库),以了解整个流程以及各个参数的具体作用.具体请见下一篇《深度学习——BP神经网络》

5. 配置GPU支持

1) 说明

到上一步简单安装之后,例程基本都可以跑了.此部分,建议初学者看看就行了,不要急于把环境配置得一步到位.NVdriver+Cuda+TensorFlow+Theano各个软件版本相互依赖,又与机器的操作系统以及显卡型号相关,在配置的过程中的确有很多坑,有可能导致桌面无法启动,以致严重打乱学习的进程.强烈建议先把深度学习的框架弄明白了,需要大量计算时,再回来配置GPU.
注意:只有评分在3.0以上的显卡才能支持tensorflow_gpu,具体型号见https://developer.nvidia.com/cuda-gpus

2) NVdriver

nvidia的卡大部分都支持深度学习,只是性能不同。可用以下命令看看自己显卡情况(Tensorflow需要评分3.0以上,Theano只需支持cuda即可)

$ lspci  | grep -i vga
$ nvidia-smi

显卡驱动可能不是最新的,一般在图形界面->系统设置->软件更新->附加驱动->选择nvidia的可用驱动.也可以用apt-get命令安装,还可以从Nvidia官网上下载安装脚本,但该方法需要先关掉图形界面,安装后再开启,比较麻烦.
另外需要注意的是,不是版本号越高,支持的显卡越多,有些老的显卡只在低版本支持——这也就是安装中最大的坑:显卡驱动升级后不支持当前硬件,使得图形界面无法启动了——不断显示输入密码界面.

$ ls /proc/driver/nvidia/gpus/

正常安装后,以上目录被生成.

3) Cuda

Cuda是一种由NVIDIA推出的通用并行计算架构,该架构使GPU能够解决复杂的计算问题。各个机器学习库都通过Cuda库调用GPU.
Cuda的安装可使用命令(不推荐此方法)

$ apt-get install nvidia-cuda-toolkit
$ nvcc -V # 安装成功后,看一下版本信息

至于安装后能否正常使用,就要看运气了.Cuda和Nvdriver,以及TensorFlow的版本都是强相关的,当使用apt-get安装Cuda时,有时会升级显卡驱动(安装时会提示升级一堆包,其中有nvidia-xxx),但升级后的驱动很可能不支持你的硬件.
推荐从https://developer.nvidia.com/cuda-downloads下载run脚本安装,脚本安装会提示你是否升级显卡驱动,此时选No即可.安装后还需要设置一些bin和lib的环境变量.cuda有很多版本,需要找到与显卡驱动匹配的版本,否则安装后还是找不到gpu.

4) Tensorflow_gpu

Tensorflow有gpu和cpu两个版本,简单安装中安装的是cpu版本,gpu版本则需要系统中安装cuda和libcudnn,且与Tensorflow匹配.比如:最新的Tensorflow需要cude-8.0版本和cudnn-6.0与之匹配,其它版本会有各种各样奇怪的报错.安装命令如下:

$ sudo pip install tensorflow_gpu

也可以从git中下载tensorflow最新代码编译,不过编译过程也需要安装bazel等工具支持,比较麻烦.
我安装成功时使用的是用pip安装tensorflow_gpu,同时安装了cuda_8.0.44_linux.run和cudnn-8.0-linux-x64-v6.0.tgz(tgz包约200M,用15M的包会报错找不到函数)

测试程序
安装后,可用以下程序测试tensorflow是否正常运行

import tensorflow as tf

hello = tf.constant('Hello, TensorFlow!')
sess = tf.Session()
print(sess.run(hello))
a = tf.constant(10)
b = tf.constant(32)
print(sess.run(a + b))

5) Theano

Theano也是基本于cuda调用GPU的,相对于Tensorflow要简单一些,它对cuda的版本要求不严格,只要在配置文件中设置正常即可调用GPU
i. 配置文件

$ vi ~/.theanorc
内容如下
[global]
device=gpu
floatX=float32

[nvcc]
optimizer=None

ii. 测试程序

from theano import function, config, shared, sandbox  
import theano.tensor as T  
import numpy  
import time  
  
vlen = 10 * 30 * 768  # 10 x #cores x # threads per core  
iters = 1000  
  
rng = numpy.random.RandomState(22)  
x = shared(numpy.asarray(rng.rand(vlen), config.floatX))  
f = function([], T.exp(x))  
print(f.maker.fgraph.toposort())  
t0 = time.time()  
for i in range(iters):  
    r = f()  
t1 = time.time()  
print("Looping %d times took %f seconds" % (iters, t1 - t0))  
print("Result is %s" % (r,))  
if numpy.any([isinstance(x.op, T.Elemwise) for x in f.maker.fgraph.toposort()]):  
    print('Used the cpu')  
else:  
    print('Used the gpu')  

6. 参考

1) 《我最喜欢的9个 Python深度学习库》

http://blog.csdn.net/u013886628/article/details/51819142

2) 《Ubuntu16.04+cuda8.0+caffe安装教程》

http://blog.csdn.net/autocyz/article/details/52299889/

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,817评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,329评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,354评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,498评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,600评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,829评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,979评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,722评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,189评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,519评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,654评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,329评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,940评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,762评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,993评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,382评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,543评论 2 349

推荐阅读更多精彩内容