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/


技术文章定时推送

请关注公众号:算法学习分享

深度学习_工具的更多相关文章

  1. XCode 3.2 Ruby和Python模板

    在xcode3.2下,我的ObjectiveCPython/Ruby项目仍然可以打开更新和编译,但是你无法创建新项目.鉴于xcode3.2中缺少ruby和python的所有痕迹(即创建项目并添加新的ruby/python文件),是否有一种简单的方法可以再次安装模板?我发现了一些关于将它们复制到某个文件夹的信息,但我似乎无法让它工作,我怀疑文件夹的位置已经改变为3.2.解决方法3.2中的应用程序模板

  2. Swift基本使用-函数和闭包(三)

    声明函数和其他脚本语言有相似的地方,比较明显的地方是声明函数的关键字swift也出现了Python中的组元,可以通过一个组元返回多个值。传递可变参数,函数以数组的形式获取参数swift中函数可以嵌套,被嵌套的函数可以访问外部函数的变量。可以通过函数的潜逃来重构过长或者太复杂的函数。

  3. 10 个Python中Pip的使用技巧分享

    众所周知,pip 可以安装、更新、卸载 Python 的第三方库,非常方便。本文小编为大家总结了Python中Pip的使用技巧,需要的可以参考一下

  4. Swift、Go、Julia与R能否挑战 Python 的王者地位

    本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请发送邮件至dio@foxmail.com举报,一经查实,本站将立刻删除。

  5. 红薯因 Swift 重写开源中国失败,貌似欲改用 Python

    本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请发送邮件至dio@foxmail.com举报,一经查实,本站将立刻删除。

  6. 你没看错:Swift可以直接调用Python函数库

    上周Perfect又推出了新一轮服务器端Swift增强函数库:Perfect-Python。对,你没看错,在服务器端Swift其实可以轻松从其他语种的函数库中直接拿来调用,不需要修改任何内容。以如下python脚本为例:Perfect-Python可以用下列方法封装并调用以上函数,您所需要注意的仅仅是其函数名称以及参数。

  7. Swift中的列表解析

    在Swift中完成这个的最简单的方法是什么?我在寻找类似的东西:从Swift2.x开始,有一些与你的Python样式列表解析相当的东西。(在这个意义上,它更像是Python的xrange。如果你想保持集合懒惰一路通过,只是这样说:与Python中的列表解析语法不同,Swift中的这些操作遵循与其他操作相同的语法。

  8. swift抛出终端的python错误

    每当我尝试启动与python相关的swift时,我都会收到错误.我该如何解决?

  9. 在Android上用Java嵌入Python

    解决方法看看this,它适用于J2SE,你可以尝试在Android上运行.

  10. android – 符合Nvidia Tegra profiler 2.0的移动设备

    解决方法通常任何基于Tegra4和K1的设备都可以工作,但我会推荐Nvidia的Shield/Note用于你的工作,不仅是他们退出便宜,而且他们的机器人留下了很多香草使它更容易使用.还有(可用的)更新策略的优点.

随机推荐

  1. crontab发送一个月份的电子邮件

    ubuntu14.04邮件服务器:Postfixroot收到来自crontab的十几封电子邮件.这些邮件包含PHP警告.>我已经解决了这些警告的原因.>我已修复每个cronjobs不发送电子邮件(输出发送到>/dev/null2>&1)>我删除了之前的所有电子邮件/var/mail/root/var/spool/mail/root但我仍然每小时收到十几封电子邮件.这些电子邮件来自cronjobs,

  2. 模拟两个ubuntu服务器计算机之间的慢速连接

    我想模拟以下场景:假设我有4台ubuntu服务器机器A,B,C和D.我想在机器A和机器C之间减少20%的网络带宽,在A和B之间减少10%.使用网络模拟/限制工具来做到这一点?

  3. ubuntu-12.04 – 如何在ubuntu 12.04中卸载从源安装的redis?

    我从源代码在Ubuntu12.04上安装了redis-server.但在某些时候它无法完全安装,最后一次makeinstallcmd失败.然后我刚刚通过apt包安装.现在我很困惑哪个安装正在运行哪个conf文件?实际上我想卸载/删除通过源安装的所有内容,只是想安装一个包.转到源代码树并尝试以下命令:如果这不起作用,您可以列出软件自行安装所需的步骤:

  4. ubuntu – “apt-get source”无法找到包但“apt-get install”和“apt-get cache”可以找到它

    我正在尝试下载软件包的源代码,但是当我运行时它无法找到.但是当我运行apt-cache搜索squid3时,它会找到它.它也适用于apt-getinstallsquid3.我使用的是Ubuntu11.04服务器,这是我的/etc/apt/sources.list我已经多次更新了.我尝试了很多不同的debs,并没有发现任何其他地方的错误.这里的问题是你的二进制包(deb)与你的源包(deb-src)不

  5. ubuntu – 有没有办法检测nginx何时完成正常关闭?

    &&touchrestarted),因为即使Nginx没有完成其关闭,touch命令也会立即执行.有没有好办法呢?这样的事情怎么样?因此,pgrep将查找任何Nginx进程,而while循环将让它坐在那里直到它们全部消失.你可以改变一些有用的东西,比如睡1;/etc/init.d/Nginx停止,以便它会休眠一秒钟,然后尝试使用init.d脚本停止Nginx.你也可以在某处放置一个计数器,这样你就可以在需要太长时间时发出轰击信号.

  6. ubuntu – 如何将所有外发电子邮件从postfix重定向到单个地址进行测试

    我正在为基于Web的应用程序设置测试服务器,该应用程序发送一些电子邮件通知.有时候测试是使用真实的客户数据进行的,因此我需要保证服务器在我们测试时无法向真实客户发送电子邮件.我想要的是配置postfix,以便它接收任何外发电子邮件并将其重定向到一个电子邮件地址,而不是传递到真正的目的地.我正在运行ubuntu服务器9.10.先感谢您设置本地用户以接收所有被困邮件:你需要在main.cf中添加:然后

  7. ubuntu – vagrant无法连接到虚拟框

    当我使用基本的Vagrantfile,只配置了两条线:我看到我的虚拟框打开,但是我的流氓日志多次显示此行直到超时:然后,超时后的一段时间,虚拟框框终于要求我登录,但是太久了!所以我用流氓/流氓记录.然后在我的物理机器上,如果我“流氓ssh”.没有事情发生,直到:怎么了?

  8. ubuntu – Nginx – 转发HTTP AUTH – 用户?

    我和Nginx和Jenkins有些麻烦.我尝试使用Nginx作为Jenkins实例的反向代理,使用HTTP基本身份验证.它到目前为止工作,但我不知道如何传递带有AUTH用户名的标头?}尝试将此指令添加到您的位置块

  9. Debian / Ubuntu – 删除后如何恢复/ var / cache / apt结构?

    我在ubuntu服务器上的空间不足,所以我做了这个命令以节省空间但是现在在尝试使用apt时,我会收到以下错误:等等显然我删除了一些目录结构.有没有办法做apt-getrebuild-var-tree或类似的?

  10. 检查ubuntu上安装的rubygems版本?

    如何查看我的ubuntu盒子上安装的rubygems版本?只是一个想法,列出已安装的软件包和grep为ruby或宝石或其他:)dpkg–get-selections

返回
顶部