机器学习、深度学习相关配置须知及其适用算法的总结


常识

传统机器学习框架和深度学习框架之间有区别。本质上,机器学习框架涵盖用于分类,回归,聚类,异常检测和数据准备的各种学习方法,并且其可以或可以不包括神经网络方法。深度学习或深度神经网络(DNN)框架涵盖具有许多隐藏层的各种神经网络拓扑。这些层包括模式识别的多步骤过程。网络中的层越多,可以提取用于聚类和分类的特征越复杂。

按照各类框架主要实现的算法的性质,我们可将这些框架(库)分为几大阵营:

  • Caffe,CNTK,DeepLearning4j,Keras,MXNet和TensorFlow等是深度学习框架(库)。
  • Scikit-learn和Spark MLlib是机器学习框架(库)。
  • Theano跨越了这两个类别。

配置的常识

  • 一般来说,深层神经网络计算在GPU(特别是Nvidia CUDA通用GPU,大多数框架)上运行的速度要比CPU快一个数量级。
  • 一般来说,更简单的机器学习方法不需要GPU的加速。

虽然可以在一个或多个CPU上训练DNN,训练往往是缓慢的,慢不是说秒或分钟。需要训练的神经元和层数越多,可用于训练的数据越多,需要的时间就越长。
举个例子:

当Google Brain小组在2016年针对新版Google翻译训练语言翻译模型时,他们在多个GPU上同时运行了一周的训练时间。没有GPU,每个模型训练实验将需要几个月。

这些框架中每一个框架具有至少一个显著特征。 Caffe的强项是用于图像识别的卷积DNN。 MXNet具有良好的可扩展性,可用于多GPU和多机器配置的训练。 Scikit-learn具有广泛的强大的机器学习方法,易学易用。 Spark MLlib与Hadoop集成,具有良好的机器学习可伸缩性。 TensorFlow为其网络图TensorBoard提供了一个独特的诊断工具。

另一方面,所有深度学习框架在GPU上的训练速度几乎相同。这是因为训练内循环在Nvidia CuDNN包中花费大部分时间。然而,每个框架采用一种不同的方法来描述神经网络,具有两个主要的阵营:

  • 使用图形描述文件的阵营
  • 通过执行代码来创建它们的描述的阵营。

考虑到这一点,让我们来看看各个算法和机器学习/深度学习框架的总结。

30个机器学习/深度学习算法总结

序号 算法名称 简称 所属类别 用途
1 卷积神经网络(Convolutional Neural Network) CNN 深度学习 常运用在图像和语音识别
2 递归神经网络(Recurrent Neural Network) RNN 机器学习 常用于NLP(自然语言识别)
3 长短期记忆神经网络(long-short term memory) LSTM RNN的其中一种形式 机器翻译、图像分析、文档摘要、语音识别、图像识别、预测疾病等
4 门控循环单元(Gated Recurrent Unit) GRU LSTM的改进 机器翻译、语音识别等
5 多层感知器(Multilayer Perceptron) MLP MLP是感知器的推广 常用于语音识别、图像识别、机器翻译等
6 生成对抗网络(Generative Adversarial Networks) GAN BP的推广 最常使用的地方就是图像生成,如超分辨率任务,语义分割等
7 受限波尔兹曼机(Restricted Boltzmann Machine) BM 机器学习 用于协同过滤,降维,分类,特征学习,主题建模以及搭建深度置信网络。
8 深度置信网络(Deep Belief Network) DBN 多层RBM 使用DBN识别特征,分类数据,还可以用来生成数据。
9 自编码器(AutoEncoder) AE 机器学习 主要用于数据可视化的数据降噪和降维
10 堆叠神经网络(Stacked Auto-Encoder) SAE 多层自编码器 降维,将复杂的输入数据转化成简单的高维特征
11 稀疏自编码器(Sparse AutoEncoder) SAE 自编码器的基础上加上L1的Regularity限制 一般用来学习特征,以便用于分类
12 降噪自编码器(Denoising AutoEncoder) DAE 自编码器的扩展 可用于图像识别、图像复原
13 Hopfield网络(Hopfield Neural Network) HNN 反馈型神经网络 求解最优化问题、文本处理
14 自组织映射(Self-Organizing Map) SOM 神经网络 用于数据降维、可视化以及聚类
15 径向基函数网络(Radial Basis Function Network) RBF network 前馈型神经网络 时间序列预测、模式分类、系统控制和非线性回归
16 脉冲神经网络(Spiking Neural Network) SNN 神经网络 用来学习生物神经系统的工作
17 极限学习机(Extreme learning Machine) ELM 前馈神经网络 可用于完成分类任务
18 反卷积网络(Deconvolutional Network) DN CNN的扩展 主要用于特征可视化
19 深度卷积逆向图网络(Deep Convolutional Inverse Graphics Network) DCIGN 变分自编码器(VAE) 可成功学习在3D渲染图像中表示姿态和光线的图形代码
20 回声状态网络(Echo State Network) ESN 属于RNN的范畴 动态模式分类,机器人控制,对象跟踪和运动目标检测,事件检测等
21 深度残差网络(Deep Residual Network) DRN 深度神经网络 图像分类,目标检测
22 支持向量机(Support Vector Machine) SVM 一种线性分类器 模式分类和非线性回归
23 神经图灵机Neural Turing Machine NTM 神经网络+记忆库 可用于自然语言处理
24 AlexNet AlexNet 其本质仍旧是CNN 目标检测
25 GoogLeNet GoogLeNet 深度神经网络 目标检测、图像识别

机器学习/深度学习常用框架(库)总结

序号 库名称 支持语言 硬件要求 基础依赖包 显著特征(强项) 适用算法 配置参考
1 scikit-learn python 不支持GPU加速 NumPy和SciPy 机器学习 支持向量机(SVM),最近邻,逻辑回归,随机森林,决策树 配置
2 Theano python 支持GPU计算 NumPy、SciPy、BLAS 速度与C媲美 机器学习和深度学习 配置
3 TensorFlow 主要python/c++,也支持Go/Java/Lua/Javascript/R 支持GPU加速 NumPy、SciPy等,CUDA和cuDNN 图像识别等 CNN、GAN、RNN、LSTM、AE等 配置
4 Keras python 支持GPU加速 基于Theano和TensorFlow 支持快速实验而生 CNN和RNN,或二者的结合 配置
5 Caffe C++、matlab、python 完美支持GPU 独立框架 图像处理 更支持CNN 配置 调用
6 Pytorch python 有一套很好的GPU运算体系 python基础包 计算机视觉,NLP CNN、RNN等 配置
7 Sonnet python 支持GPU加速 TensorFlow 搭建AI高级结构 LSTM、RNN、CNN等 配置
8 MXNet C++, Python, R, Scala, Julia, Matlab、JavaScript等语言 支持CPU加速 CUDA和cuDNN 图像识别、NLP情感分析 CNN、RNN 配置
9 CNTK C ++和Python 实现了跨多个gpu和服务器的自动分异和并行化 python基础包或Keras 语音识别领域 支持各种前馈网络,包括MLP、CNN、RNN、LSTM等 配置
10 Dlib C ++、python 支持GPU加速 cuda、cudnn 图像处理 SVM、聚类算法、数值算法等 配置

更多详细的库和算法的使用情况可以查看我们的思维导图

服务器配置建议

CPU

根据在所有的机器学习和深度学习的框架以及库中,大部分都只是支持GPU运算的,即使是可以CPU与GPU混用的,CPU的运行速度比GPU运行速度不只低一个数量级。GPU可以短时间运行结束的,CPU需要大量的时间来运行。

CPU在深度学习任务中,CPU并不负责主要任务,单显卡计算时只有一个核心达到100%负荷,所以CPU的核心数量和显卡数量一致即可,太多没有必要,但是处理PICE的带宽要到40.

建议CPU配置

  • Intel i7-7800X(内核数:6核;线程数:12;处理器基频:3.5GHz;最大睿频频率:4.00GHz;缓存:8.25MB L3)
  • Intel E5-2620 v3(内核数:6核;线程数:12;处理器基频:2.6GHz;最大睿频频率:3.2GHz;缓存:15MB SmartCache)
  • Intel i7-6850K(核心数:6核;线程数:12核;处理器基频:2.6GHz;最大睿频率频率:4.0GHz;缓存:15MB)

GPU

现在机器学习与深度学习最主要都是基于CUDA计算(CUDA是NVIDIA开发GPU并行计算环境),所以建议使用的GPU为NVIDIA公司的GPU

由于现在机器学习和深度学习的框架都只是支持单精度,所以双精度浮点计算时不必要的。并且,太高精度对于深度学习的错误率时没有提升的。

建议GPU配置:(建议GPU配置至少要有两个)

  • GeForce GTX1060(显存:6GB;内存带宽:216GB/s;处理器:1280个CUDA核心@1708核心MHz)(最低配置)
  • GeForce GTX1070(显存:8GB;内存带宽:256GB/s;处理器:1920个CUDA核心@1683核心MHz)
  • GeForce GTX1070Ti(显存:8GB;内存带宽:256GB/s;处理器:2432个CUDA核心@1683核心MHz)
  • GeForce Gtx1080(显存:8GB;内存带宽:320GB/s;处理器:2560个CUDA核心@1733核心MHz)
  • GeForce GTX1080Ti(显存:11GB;内存带宽:484GB/s;处理器:3585个CUDA核心@1582核心MHz)

DDR

  • 海盗船32G-DDR4
  • 金士顿骇客神条Fury系列DDR4 2400 32G(16GB*2)

硬盘

最主要是使用来存储数据,所以存储空间越大越好,至少是1T

SSD

  • Intel 600P系列 512G M.2
  • Intel 600P系列 1T M.2
  • 三星 960EVO 1TB M.2 NVMe

常用库的配置详情

scikit-learn

安装conda包

为什么要安装conda?

  • 1、用conda我们可以非常方便地安装python的各种package(e.g. numpy, scipy, matplotlib, tensorflow, pytorch, etc.),而不用管包与包之间的dependency问题——比如有的时候你安装新的package1,它要求numpy 1.0版本,你再次安装package2,他又要求numpy1.3,这个时候就会出问题:要么package1用不了,要么package2安装失败。
  • 2、conda有点类似于pip(它们是竞争关系),但是比pip更方便,更具优势,因为它允许在一台机器上有多个python版本共存。我们可以使用conda建立多个独立的开发环境(env),在每个环境中安装自己需要的python版本及各种相关的package版本。
  • 3、对于多用户的机器,如实验室的服务器,conda的安装本身也是相互独立的。也就是说,如果你安装了conda,别人是不知道的,也就不会去动你的开发环境。

下载并安装conda

安装conda可以通过安装Anaconda或者Miniconda实现。我们的目的——安装科学研究使用的开发环境而言,使用轻量化的Miniconda就可以了。

  • 用户登录后开始配置

    login username
    
  • 通过wget下载conda

    # 在用户目录下:/home/username/wget https://repo.continuum.io/miniconda/Miniconda3-latest-Linux-x86_64.sh
    
  • 安装conda

    进入该.sh文件所在位置。输入下面的命令并回车运行

    bash Miniconda3-latest-Linux-x86_64.sh
    

    仔细看安装提示,一般是Enter或者输入yes,然后会安装一堆东西

    Do you wish the installer to prepend the Miniconda3 install location
    to PATH in your /home/(your directory)/.bashrc ? [yes|no]
    [no] >>> yes
    

    上面输入yes,会在你文件夹下的~/.bashrc 文件末尾添加一句export PATH=/home/[your directory]/miniconda3/bin:$PATH,表示将conda加入你的环境变量。通过vim ~/.bashrc可以查看。
    如果提示下面信息,输入no:(在服务器上我们不适用Microsoft VSCode,所以选no)

    Do you wish to proceed with the installation of Microsoft VSCode? [yes|no]
    >>> no
    
  • 检验当前python版本

    安装conda的时候,默认安装了一个python,我们下载了python3.6版本的conda, 所以应该有一个3.6版本的python。输入python,或者python3,你发现你的python版本还是原来服务器上的2.7和3.4。或者你输入which python或which python3,显示的python的位置也是/usr/bin/python或/usr/bin/python3。也就是说,我们安装好的conda还没有被激活。

  • 激活conda

    因为每个人安装的conda都是独立的,所以每次重新登录的时候,conda是没有被激活的,可以在命令行输入conda测试一下,应该会返回

    conda: commmand not found
    

    此时需要输入source /.bashrc。这表示激活/.bashrc文件中的环境变量。
    所以这里有一点小麻烦,在每次你想使用conda或者相应的开发环境的时候,你都得用

    source ~/.bashrc
    

    激活一次。这么做是为了保证conda的相对独立性。默认不激活conda,此时,你可以使用服务器公用的python2.7和python3.4。需要你自己配置的开发环境时你再激活。
    此时输入:

    conda --version
    

    会看到

    conda 4.5.11
    
  • 简单的conda指令

    强烈建议直接看官方doc Getting started with conda ,这里各种conda的命令和作用讲得比较全。

    • 检查conda里的开发环境(env):

      conda env list 或者conda info --envs
      

      看到

      base                  *  /home/(your directory)/miniconda3
      

      只有上面这一行,就是默认的环境,中间有个*。这一行的意思是,我们当前所在的环境是默认环境。我们可以直接在这个默认环境上安装包,但是这不是明智的做法,大家都会第一时间使用默认环境,容易出问题。所以,下面将介绍如何创建并配置自己的独立的开发环境。

  • 创建独立的开发环境并同时安装基础包

    名字是python27,也可以改成自己想要的名字,python版本是2.7,后面的是基础的python包

    conda create -n python27 python=2.7 numpy scipy seaborn pandas matplotlib scikit-learn jupyter notebook
    

    会出现一堆列表然后让你选[Y]/n, 直接回车就可以了。
    这段命令同时干了两件事:

    • 1)建立python版本为2.7的开发环境;

    • 2)在该环境下同时安装 numpy scipy seaborn pandas matplotlib scikit-learn jupyter notebook 等python包。

    安装结束后得到如下内容:

        Preparing transaction: done
    Verifying transaction: done
    Executing transaction: done
    #
    # To activate this environment, use:
    # > source activate python27
    #
    # To deactivate an active environment, use:
    # > source deactivate
    

    按照上面说的,激活环境python27:source activate python27,你会看到你的命令行的开头多出来(python27)的字样,表示你处于python27环境中。输入 python,which python之类的命令可以再次看出与之前python版本不同。
    输入 source deactivate可以退出当前环境(回到默认环境base)。

    再次检验conda环境:
    conda env list
    现在应该会出现两行,如果你处在python27环境中, *会出现在开头是python27的那一行

    检验python27环境下的python包安装情况
    conda list
    应该会出来一个列表,显示所有安装好的包及版本。

安装python包

激活env

source activate python27

激活后如下:

(python27) username@hostname:~$

激活后可使用下列两种方式安装

  • 用pip装

    使用conda新建一个env的时候都会默认安装pip,所以你可以直接在激活该环境的情况下用pip安装其他python包。建议安装前用which pip 检验pip所在环境。

  • 用conda装

    可以先用conda search [package_name]检查conda是否提供了该package的安装,如果返回正常,则使用 conda install [package_name]安装

安装 Scikit-learn

在虚拟环境中执行如下命令:

  • 更新pip

    python -m pip install --upgrade pip
    
  • 更新包

    列出可升级的包
    
  • 更新需要更新的包

    pip install --upgrade pakagename
    
  • 开始安装(sklearn是scikit-learn的简称)

    pip  install  sklearn或者pip install scikit-learn
    
  • 当看到如下说明安装成功

    Sueccessfully installed scikit-learn-x.x.x sklearn.x.x
    

    打开python检验

    pythonPython 2.7.15 |Anaconda, Inc.| (default, Oct 10 2018, 21:32:13)
    [GCC 7.3.0] on linux2
    Type "help", "copyright", "credits" or "license" for more information.
    >>>import sklearn
    >>>
    

TensorFlow

安装python包或者安装conda

在上一个库的配置中已经安装了conda,具体配置可见上面sklearn的配置中的conda安装,这里不再赘述。

基于 VirtualEnv 的安装

我们推荐使用 virtualenv 创建一个隔离的容器, 来安装 TensorFlow. 这是可选的, 但是这样做能使排查安装问题变得更容易.

  • 创建虚拟环境

    创建一个名为TensorFlow的虚拟环境,也可以用其它的名字,使用的python的版本为python3.5(也可以为其它版本)
    执行命令:

    conda create -n tensorflow python=3.5
    

    提示信息:

    Solving environment: done## Package Plan ##environment location: /home/zhongxiao/miniconda3/envs/tensorflowadded / updated specs:- python=3.5The following packages will be downloaded:
    ...
    The following NEW packages will be INSTALLED:ca-certificates: 2018.03.07-0
    certifi:         2018.8.24-py35_1
    libedit:         3.1.20170329-h6b74fdf_2
    libffi:          3.2.1-hd88cf55_4
    ...
    wheel:           0.31.1-py35_0
    xz:              5.2.4-h14c3975_4
    zlib:            1.2.11-ha838bed_2# 输入y,回车继续
    Proceed ([y]/n)? y
    ...
    Preparing transaction: done
    Verifying transaction: done
    Executing transaction: done
    #
    # To activate this environment, use
    #
    #     $ conda activate tensorflow
    #
    # To deactivate an active environment, use
    #
    #     $ conda deactivate
    
  • 激活虚拟环境

    我们需要激活刚才创建的python3版本的虚拟环境后才可以选择在其基础上安装TensorFlow。所以如下命令激活名为tensorflow的虚拟环境:

    source activate tensorflow
    

    可以看到:

    (tensorflow) username@hostname:~$
    
  • 更新pip

    pip install --upgrade pip
    
  • 安装不支持GPU加速的TensorFlow

    如果你的电脑显卡很渣,或者你并不想用GPU版的TensorFlow,那可以选择装不要GPU加速的Tenso。

    pip install tensorflow
    
    • 如果出现:

      Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2 FMA
      

    由于tensorflow默认分布是在没有CPU扩展的情况下构建的,例如SSE4.1,SSE4.2,AVX,AVX2,FMA等。默认版本(来自pip install tensorflow的版本)旨在与尽可能多的CPU兼容。另一个观点是,即使使用这些扩展名,CPU的速度也要比GPU慢很多,并且期望在GPU上执行中型和大型机器学习培训。

    • 解决方法:

      • 1.在代码中加入如下代码,忽略警告:

        import os
        os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'
        
      • 2.编译TensorFlow源码

        如果你没有GPU并且希望尽可能多地利用CPU,那么如果您的CPU支持AVX,AVX2和FMA,则应该从针对CPU优化的源构建tensorflow。在这个问题中已经讨论过这个问题,也是这个GitHub问题。 Tensorflow使用称为bazel的ad-hoc构建系统,构建它并不是那么简单,但肯定是可行的。在此之后,不仅警告消失,tensorflow性能也应该改善。也可参考编译安装TensorFlow

    • 测试TensorFlow

      在home目录下创建tensorflow文件夹,再在里面创建tensorboard.py文件,并写入:

      """
      Please note, this code is only for python 3+. If you are using python 2+, please modify the code accordingly.
      """
      from __future__ import print_function
      import tensorflow as tf
      import numpy as npdef add_layer(inputs, in_size, out_size, n_layer, activation_function=None):# add one more layer and return the output of this layerlayer_name = 'layer%s' % n_layerwith tf.name_scope(layer_name):with tf.name_scope('weights'):Weights = tf.Variable(tf.random_normal([in_size, out_size]), name='W')tf.summary.histogram(layer_name + '/weights', Weights)with tf.name_scope('biases'):biases = tf.Variable(tf.zeros([1, out_size]) + 0.1, name='b')tf.summary.histogram(layer_name + '/biases', biases)with tf.name_scope('Wx_plus_b'):Wx_plus_b = tf.add(tf.matmul(inputs, Weights), biases)if activation_function is None:outputs = Wx_plus_belse:outputs = activation_function(Wx_plus_b, )tf.summary.histogram(layer_name + '/outputs', outputs)return outputs# Make up some real data
      x_data = np.linspace(-1, 1, 300)[:, np.newaxis]
      noise = np.random.normal(0, 0.05, x_data.shape)
      y_data = np.square(x_data) - 0.5 + noise# define placeholder for inputs to network
      with tf.name_scope('inputs'):xs = tf.placeholder(tf.float32, [None, 1], name='x_input')ys = tf.placeholder(tf.float32, [None, 1], name='y_input')# add hidden layer
      l1 = add_layer(xs, 1, 10, n_layer=1, activation_function=tf.nn.relu)
      # add output layer
      prediction = add_layer(l1, 10, 1, n_layer=2, activation_function=None)# the error between prediciton and real data
      with tf.name_scope('loss'):loss = tf.reduce_mean(tf.reduce_sum(tf.square(ys - prediction),reduction_indices=[1]))tf.summary.scalar('loss', loss)with tf.name_scope('train'):train_step = tf.train.GradientDescentOptimizer(0.1).minimize(loss)sess = tf.Session()
      merged = tf.summary.merge_all()writer = tf.summary.FileWriter("logs/", sess.graph)init = tf.global_variables_initializer()
      sess.run(init)for i in range(1000):sess.run(train_step, feed_dict={xs: x_data, ys: y_data})if i % 50 == 0:result = sess.run(merged,feed_dict={xs: x_data, ys: y_data})writer.add_summary(result, i)# direct to the local dir and run this in terminal:
      # $ tensorboard --logdir logs
      
    • 在虚拟环境下执行

    $ python tensorboard.py
    
    • 查看运行结果

      因为服务器一般不支持桌面系统,所以无法查看tensorflow的运行结果,但是我们连接ssh时,可以将服务器的6006端口重定向到自己机器上来:

      • 首先退出远程连接

        exit
        
      • ssh连接

        ssh -L 16006:127.0.0.1:6006 username@remote_server_ip
        

        其中:16006:127.0.0.1代表自己机器上的16006号端口,6006是服务器上tensorboard使用的端口。

      • 进入tenorflow虚拟环境

        source activate tensorflow
        
      • 如果报错,如果没有报错,则可跳过下面几行:

         shell脚本中含有source命令运行时提示 source: not found
        
      • 测试:

        ls -l /bin/sh显示:/bin/sh -> dash
        

        可见,这是由于默认的dash导致source解析不了,需要切换为bash

      • 解决方案:

        sudo dpkg-reconfigure dash(
        

        在界面中选择no ,再运行ls -l /bin/sh 后显示/bin/sh -> bash
        ,至此问题已解决。

      • 再次运行命令进入虚拟环境

        source activate tensorflow
        
      • 将路径切换到tensorflow文件夹下,执行:

        (tensorflow) username@Hostname:~/tensorflow$ tensorboard --logdir logs
        
      • 可以看到:

        TensorBoard 1.11.0 at http://WeiLy:6006 (Press CTRL+C to quit)
        
      • 在本地浏览器中查看,在浏览器输入:

        http://127.0.0.1:16006
        
      • 可见:

      loss曲线:

      神经网络图:

      每一层的weights和biases变化情况

      • 说明我们CPU版本的TensorFlow配置已经大工告成了!
  • 安装支持GPU加速的TensorFlow

    • 安装CUDA

      简介:CUDA(Compute Unified Device Architect,统一计算架构),是NVIDIA创造的一个并行计算平台和编程模型。它利用图形处理器(GPU)能力,实现计算性能的显著提高。
      根据TensorFlow的版本安装对应的cuda,本服务器上需要安装的是cuda9.0

      • 可用命令行下载

        wget https://developer.nvidia.com/compute/cuda/9.0/Prod/local_installers/cuda-repo-rhel7-9-0-local-9.0.176-1.x86_64-rpm
        

Theano

Theano是一个Python库,可让您定义,优化和评估数学表达式,尤其是具有多维数组的数学表达式(numpy.ndarray)。使用Theano可以获得与手工制作的C实现相媲美的速度,以解决涉及大量数据的问题。通过利用最近的GPU,它还可以在CPU上超过C级数。

安装Theano

  • 用conda创建虚拟环境
    创建名为theano_python35,基于python3.5的虚拟环境。

    conda create -n theano_python35 python=3.5
    

    激活虚拟环境:

    source activate theano_python35
    

    更新pip:

    pip install --upgrade pip
    
  • 安装基础依赖包和可选包

    安装基础包

    pip install numpy scipy mkl
    

    安装可选包,其作用如下:

    • nose > = 1.3.0

      运行Theano的测试套件。

    • Sphinx > = 0.5.1,pygments

      用于构建文档。数学显示为图像也需要LaTeX和dvipng。

    • pydot-NG

      处理gif /图像的大图片。

    • NVIDIA CUDA驱动程序和SDK

      强烈建议在NVIDIA gpus上生成/执行GPU代码。

    • libgpuarray
      在CUDA和OpenCL设备上生成GPU / CPU代码时需要。

    • pycuda和skcuda

      GPU上的一些额外操作(如fft和求解器)需要。我们用它们来包裹袖口和cusolver。快速安装 。对CUDA 8,需要用于cusolver skcuda的dev的版本。
      这里可选择,安装nose、sphinx、pydot-ng,其它包需要用时再安装:

      pip install nose sphinx pydot-ng
      
    • 安装和配置GPU驱动程序

      因为服务器GPU目前不支持CUDP驱动,所以这项暂且跳过。

  • 安装稳定版的Theano

    如果使用conda,可以直接安装theano和pygpu。Libgpuarray将作为pygpu的依赖项自动安装。这里我直接用conda安装:

     conda install theano pygpu
    

测试Theano

用下面的指令测试(测试时会有其他错误提示或是warnings,但基本上还能运行的话则说明theano没问题,错误提示可能是有些东西还没安装好):

import theano
theano.test()

如果遇到报错:

ImportError: No module named 'parameterized'

安装parameterized:

pip install parameterized

Keras

Keras是一个高层神经网络API,Keras由纯Python编写而成并基Tensorflow、Theano以及CNTK后端。Keras 为支持快速实验而生,能够把你的idea迅速转换为结果,如果你有如下需求,请选择Keras:

  • 简易和快速的原型设计(keras具有高度模块化,极简,和可扩充特性)
  • 支持CNN和RNN,或二者的结合
  • 无缝CPU和GPU切换
    Keras适用的Python版本是:Python 2.7-3.6

Keras的设计原则是

  • 用户友好:用户的使用体验始终是Keras考虑的首要和中心内容。Keras遵循减少认知困难的最佳实践:Keras提供一致而简洁的API, 能够极大减少一般应用下用户的工作量,同时,Keras提供清晰和具有实践意义的bug反馈。
  • 模块性:模型可理解为一个层的序列或数据的运算图,完全可配置的模块可以用最少的代价自由组合在一起。具体而言,网络层、损失函数、优化器、初始化策略、激活函数、正则化方法都是独立的模块,你可以使用它们来构建自己的模型。
  • 易扩展性:添加新模块超级容易,只需要仿照现有的模块编写新的类或函数即可。创建新模块的便利性使得Keras更适合于先进的研究工作。
  • 与Python协作:Keras没有单独的模型配置文件类型(作为对比,caffe有),模型由python代码描述,使其更紧凑和更易debug,并提供了扩展的便利性。

由于Keras默认以Tensorflow为后端,且Theano后端更新缓慢,这里默认采用Tensorflow1.0作为Keras后端。

对配置的要求

  • 推荐配置

    如果是高校学生或者高级研究人员,并且实验室或者个人资金充沛,建议采用如下配置:

    • 主板:X299型号或Z270型号
    • CPU: i7-6950X或i7-7700K 及其以上高级型号
    • 内存:品牌内存,总容量32G以上,根据主板组成4通道或8通道
    • SSD: 品牌固态硬盘,容量256G以上
    • 显卡:NVIDIA GTX TITAN(XP) NVIDIA GTX 1080ti、NVIDIA GTX TITAN、NVIDIA GTX 1080、NVIDIA GTX 1070、NVIDIA GTX 1060 (顺序为优先建议,并且建议同一显卡,可以根据主板插槽数量购买多块,例如X299型号主板最多可以采用×4的显卡)
  • 最低配置

    如果仅仅用于自学或代码调试,亦或是条件所限仅采用自己现有的设备进行开发,那么电脑至少满足以下几点:

    • CPU:Intel第三代i5和i7以上系列产品或同性能AMD公司产品
    • 内存:总容量4G以上

安装Keras

  • 进入需要配置库的python环境

    这里我利用conda建立了虚拟环境python35(基于python3.5)

    conda create -n python35 python=3.5
    

    如果提示:

    conda: command not found
    

    执行如下命令导入环境变量之后再执行上面:

    source ~/.barshrc
    
  • 安装依赖库TensorFlow

    • 激活虚拟环境

      source activate python35
      

      看到命令行前出现(python3.5)表明正处于虚拟环境中,如果你不需要用到虚拟环境,这一步可以跳过。

    • 安装tensorflow
      pip install tensorflow
      

      出现:

      Successfully installed ......
      

      表明安装成功

  • 安装Keras

    执行如下命令:

    pip install keras
    

    等待几分钟,出现下面表明安装成功:

    Successfully built pyyaml
    Installing collected packages: scipy, pyyaml, keras
    

测试Keras

  • 创建测试py文件:

    addition_rnn.py,内容参考

  • 开始测试

    执行命令

    python addition.py
    

    迭代200次后的结果:

    ...Iteration 199
    Train on 45000 samples, validate on 5000 samples
    Epoch 1/1
    45000/45000 [==============================] - 8s 187us/step - loss: 1.4244e-04 - acc: 1.0000 - val_loss: 7.8142e-04 - val_acc: 0.9998
    Q 73+384  T 457  ☑ 457
    Q 90+833  T 923  ☑ 923
    Q 28+473  T 501  ☑ 501
    Q 241+598 T 839  ☑ 839
    Q 371+811 T 1182 ☑ 1182
    Q 940+1   T 941  ☑ 941
    Q 5+451   T 456  ☑ 456
    Q 111+70  T 181  ☑ 181
    Q 729+3   T 732  ☑ 732
    Q 328+42  T 370  ☑ 370
    

Caffe

Caffe是由伯克利大学的贾杨清等人开发的一个开源的深度学习框架,采用高效的C++语言实现,并内置有Python和MATLAB接口,以供开发人员使用Python或MATLAB来开发和部署以深度学习为核心算法的应用。Caffe适用于互联网级别的海量数据处理,包括语音,图片,视频等多媒体数据。Caffe的高速运算是通过GPU来实现的,在K40或者Titan GPU上每天可处理4千万张图片,相当于1张图片仅用2.5ms,速度非常快。

创建虚拟安装Caffe的虚拟环境

如果不用虚拟环境安装可跳过这步

conda create -n caffe_python35 python=3.5

激活

source activate caffe_python35

更新pip

pip install --upgrade pip

安装依赖包

  • Caffe的基础依赖包:

    • GPU模式需要CUDA。

      建议使用库版本7+和最新的驱动程序版本,但6. *也可以
      5.5和5.0是兼容的,但被认为是遗留的

    • BLAS通过ATLAS,MKL或OpenBLAS。

    • Boost > = 1.55

    • protobuf,glog,gflags,hdf5

  • 可选的依赖项:

    • OpenCV > = 2.4包括3.0
    • IO库:lmdb,leveldb(注意:leveldb要求snappy)
    • 用于GPU加速的cuDNN(v6)

仅限CPU的Caffe:设置Makefile.config中的CPU_ONLY := 1以配置和构建没有CUDA的Caffe。这有助于云或群集部署。

cuDNN Caffe:为了实现最快的操作,通过嵌入式集成NVIDIA cuDNN加速了Caffe的发展。要加速Caffe模型,请安装cuDNN,然后在Makefile.config中设置标志:USE_CUDNN := 1。

  • 执行安装

    • 更新系统库
    sudo apt-get update
    
    • 安装依赖包
    sudo apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libhdf5-serial-dev protobuf-compilersudo apt-get install --no-install-recommends libboost-all-devsudo apt-get install libopenblas-dev liblapack-dev libatlas-base-devsudo apt-get install libgflags-dev libgoogle-glog-dev liblmdb-devsudo apt-get install git cmake build-essential
    

    有一定几率安装失败而导致后续步骤出现问题,所以要确保以上依赖包都已安装成功,验证方法就是重新运行安装命令,如验证 git cmake build-essential是否安装成功共则再次运行以下命令:

    username@Hostname:~$ sudo apt-get install git cmake build-essential
    Reading package lists... Done
    Building dependency tree
    Reading state information... Done
    build-essential is already the newest version (12.1ubuntu2).
    cmake is already the newest version (3.5.1-1ubuntu3).
    git is already the newest version (1:2.7.4-0ubuntu1.5).
    The following packages were automatically installed and are no longer required:gir1.2-git2-glib-1.0 gir1.2-gucharmap-2.90 gir1.2-zeitgeist-2.0 libgit2-24 libgit2-glib-1.0-0 libhttp-parser2.1 libllvm3.8libpango1.0-0 libqmi-glib1 libssh2-1 linux-headers-4.4.0-21 linux-headers-4.4.0-21-generic linux-image-4.4.0-21-genericlinux-image-extra-4.4.0-21-generic
    Use 'sudo apt autoremove' to remove them.
    0 upgraded, 0 newly installed, 0 to remove and 7 not upgraded.
    
    • 安装CUDA

    如果是仅CPU安装caffe,可以跳过CUDA安装。

  • 安装 opencv3.1

    来源于参考文档

    • 下载OpenCV3.1

      sudo git clone https://github.com/opencv/opencv.git
      

      我在下载的时候出现timed out的报错,也就是下载不下来,最后只好先用本地电脑浏览器进入OpenCV官网下载好source包,再用winSCP传到服务器,虽然有些笨拙,但着实实用。

    • 解压到你要安装的位置,命令行进入已解压的文件夹 opencv-3.1.0 目录下,执行:

      mkdir build # 创建编译的文件目录cd buildcmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local ..
    • 但是在安装OpenCv 3.1的过程中要下载ippicv_linux_20151201,由于网络的原因,这个文件经常会下载失败。

      CMake Error at 3rdparty/ippicv/downloader.cmake:73 (file):
      file DOWNLOAD HASH mismatch
      for file: [/home/opencv-3.1.0/3rdparty/ippicv/downloads/linux-808b791a6eac9ed78d32a7666804320e/ippicv_linux_20151201.tgz]expected hash: [808b791a6eac9ed78d32a7666804320e]actual hash: [d41d8cd98f00b204e9800998ecf8427e]status: [7;"Couldn't connect to server"]
      
    • 解决方案

      来源于: 参考文档1 参考文档2

      • 用本地下载 ippicv_linux_20151201,用winSCP上传到服务器。

      • 将下载好的文件ippicv_linux_20151201.tgz拷贝到文件夹路径中:

      cp <文件所在路径>/ippicv_linux_20151201.tgz /home/opencv-3.1.0/3rdparty/ippicv/downloads/linux-808b791a6eac9ed78d32a7666804320e/
      

      注意,在报错之前,系统不会创建该文件夹,报错之后系统会创建该文件夹用来存储ippicv_linux_20151201.tgz文件,但是下载失败,所以可以把手动下载的文件替换。

      • 重新cmake

        cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local ..
        
      • 编译

        make -j8  #编译
        

        编译是可能会有一些警告,因为我们没有安装CUDA造成的,我们只需要安装CPU版本的caffe,所以我们暂且可以忽视错误

      • 编译成功后安装:

        sudo make install #安装
        
      • 测试OpenCV

        安装完成后通过查看 opencv 版本验证是否安装成功:

        pkg-config --modversion opencv
        

安装caffe

  • 首先在你要安装的路径下 clone :

    git clone https://github.com/BVLC/caffe.git
    

    如果像上面一样失败,就用本地下载,在上传到服务器。

  • 进入 caffe ,将 Makefile.config.example 文件复制一份并更名为 Makefile.config ,也可以在 caffe 目录下直接调用以下命令完成复制操作 :

    sudo cp Makefile.config.example Makefile.config
    
  • 修改 Makefile.config 文件内容:

    vim Makefile.config
    
    • 应用 opencv 版本

      将
      #OPENCV_VERSION := 3
      修改为:
      OPENCV_VERSION := 3
      
    • 使用 python 接口

      将
      #WITH_PYTHON_LAYER := 1
      修改为
      WITH_PYTHON_LAYER := 1
      
    • 修改 python 路径

      INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include
      LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib
      修改为:
      INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include /usr/include/hdf5/serial
      LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib /usr/lib/x86_64-linux-gnu /usr/lib/x86_64-linux-gnu/hdf5/serial
      
    • 修改boost library所在位置

      PYTHON_LIBRARIES := boost_python2.7 python2.7m
      PYTHON_INCLUDE := /usr/include/python3.5m \/usr/lib/python2.7/dist-packages/numpy/core/includ
      修改为
      PYTHON_LIBRARIES := boost_python3 python3.5m
      PYTHON_INCLUDE := /usr/include/python3.5m \/usr/lib/python3.5/dist-packages/numpy/core/include
      
  • 然后修改 caffe 目录下的 Makefile 文件:

    将:
    NVCCFLAGS +=-ccbin=$(CXX) -Xcompiler-fPIC $(COMMON_FLAGS)
    替换为:
    NVCCFLAGS += -D_FORCE_INLINES -ccbin=$(CXX) -Xcompiler -fPIC $(COMMON_FLAGS)
    
    将:
    LIBRARIES += glog gflags protobuf boost_system boost_filesystem m hdf5_hl hdf5
    改为:
    LIBRARIES += glog gflags protobuf boost_system boost_filesystem m hdf5_serial_hl hdf5_serial
    
  • 开始编译了,在 caffe 目录下执行 :

    make all -j8
    

    如果报错:

    errorwhile loading shared libraries: libopencv_core.so.3.1
    

    解决的方法,安装ffmpeg:

    sudo apt install ffmpeg
    

    重新编译

    sudo make cleansudo make all -j8
    

    如果出现:

    /usr/bin/ld: cannot find -lboost_python3
    collect2: error: ld returned 1 exit status
    Makefile:584: recipe for target '.build_release/lib/libcaffe.so.1.0.0' failed
    make: *** [.build_release/lib/libcaffe.so.1.0.0] Error 1
    make: *** Waiting for unfinished jobs....
    

    解决方法:

    首先去/usr/lib/x86_64-linux-gnu目录下查看是否有python3版本的libboost,如果有类似libboost_python35.so但是没有libboost_python3.so则需要手动建立连接。

    sudo ln -s libboost_python-py35.so libboost_python3.so
    

    测试caffe

    sudo make runtest -j8
    

    看到这个图,说明Caffe成功安装:

  • 安装 pycaffe 接口环境

    在上一步成功安装 caffe 之后,就可以通过 caffe 去做训练数据集或者预测各种相关的事了,只不过需要在命令行下通过 caffe 命令进行操作,而这一步是 pycaffe 的安装,这样我们就可以用python操作caffe了。

    • 首先编译 pycaffe :

      $ sudo make pycaffe
      
    • 编译之后,引入环境变量:
      source ~/.bashrc
      
    • 测试caffe
      # 打开默认的python环境python# 输入:import caffe
      

      如果出现:

      ImportError: No module named 'skimage'
      

      执行:

      sudo apt-get install python-skimagesudo pip install scikit-image --upgrade
      

      重新编译

      sudo make cleansudo make all -j8
      

      测试:

      # 输入python,打开默认python环境python# 尝试引入caffe包import caffe
      

      如果没报错,说明pycaffe配置成功。

最后,配置环境变量

你会发现当你再次登录的时候,pycaffe又不能用le,因为之前的环境变量是临时的,下面是将环境变量存到文件中,永久有效:

sudo vim /etc/profile

添加

# 这里的路径是caffe安装的路径export PYTHONPATH=/path/to/caffe/python:$PYTHONPATH

这样就不用每次进入环境都需要导入一次环境变脸了。

Pytorch

Sonnet

MXNet

CNTK

Dlib

机器学习/深度学习常用库的配置及其适用的算法总结相关推荐

  1. 机器学习深度学习 常用算法推导

    基础 符号 含义 CCC 特征通道数(此处仅代表含义,不同地方的CCC数值可能不同) NNN 样本数 以下所有"向量"代表列向量 每一个样本点xxx都是一个向量,多个样本组成矩阵X ...

  2. 数据挖掘 python库_python数据可视化、数据挖掘、机器学习、深度学习 常用库、IDE等...

    Qt 之 数字钟 本例用来展示 QTimer 的使用,如何定时的更新一个窗口部件. 1  QLCDNumber 类 QLCDNumber 是一种可将数字显示为类似 LCD 形式的窗口部件,它同 QLa ...

  3. DL之AF:机器学习/深度学习中常用的激活函数(sigmoid、softmax等)简介、应用、计算图实现、代码实现详细攻略

    DL之AF:机器学习/深度学习中常用的激活函数(sigmoid.softmax等)简介.应用.计算图实现.代码实现详细攻略 目录 激活函数(Activation functions)相关配图 各个激活 ...

  4. 深度学习常用python库学习笔记

    深度学习常用python库学习笔记 常用的4个库 一.Numpy库 1.数组的创建 (1)np.array() (2)np.zeros() (3)np.ones() (4)np.empty() (5) ...

  5. Paper:机器学习、深度学习常用的国内/国外引用(References)论文参考文献集合(建议收藏,持续更新)

    Paper:机器学习.深度学习常用的国内/国外引用(References)论文参考文献集合(建议收藏,持续更新) References 1.国外格式 [1] D. E. Rumelhart, G. E ...

  6. 深度学习入门之Python小白逆袭大神系列(三)—深度学习常用Python库

    深度学习常用Python库介绍 目录 深度学习常用Python库介绍 简介 Numpy库 padas库 PIL库 Matplotlib库 简介 Python被大量应用在数据挖掘和深度学习领域,其中使用 ...

  7. 基于PyTorch、易上手,细粒度图像识别深度学习工具库Hawkeye开源

    转载自丨机器之心 鉴于当前领域内尚缺乏该方面的深度学习开源工具库,南京理工大学魏秀参教授团队用时近一年时间,开发.打磨.完成了 Hawkeye--细粒度图像识别深度学习开源工具库,供相关领域研究人员和 ...

  8. 凸优化 机器学习 深度学习_我应该在机器学习项目中使用哪个优化程序

    凸优化 机器学习 深度学习 This article provides a summary of popular optimizers used in computer vision, natural ...

  9. 方法 | 机器学习(深度学习)通用工作流程

    机器学习(深度学习)通用工作流程 Deep Learning with Python 4.5节 1. 定义问题并装载数据集(Defining the problem and assembling a ...

  10. python3人工智能网盘_《Python3入门人工智能掌握机器学习+深度学习提升实战能力》百度云网盘资源分享下载[MP4/5.77GB]...

    内容简介 本资源为<Python3入门人工智能掌握机器学习+深度学习提升实战能力>百度云网盘资源分享下载,具体看下文目录,格式为MP4/5.77GB.本资源已做压缩包处理,请勿直接在百度网 ...

最新文章

  1. AI技术必备资源汇总
  2. 分享丨国外20个机器学习相关博客推荐
  3. vue-cli  自动切换环境
  4. mysql范围查找性能_MYSQL(四)查询性能优化
  5. 动画理解Dijkstra算法过程
  6. 红帽借“订阅”模式成开源一哥,首创者升任总裁
  7. 真!长!啊!中国校名最长的学校竟然有55个字!
  8. pyqt5 qstring在哪个库_PyQt模型/视图结构编程示例:QStringListModel的用法
  9. SQL允许你用EXECUTE执行一个变量中定义的SQL语句,并且允许你在被执行的SQL语句中,再次嵌套入一个变量定义的语句,并且再次在其中用EXECUTE执行它...
  10. 关于射频技术在粮食安全的科研进展
  11. 鬼压床、清明梦、外星劫持……睡眠麻痹症能够解释这些都市传说吗?
  12. proccessing 中的 port busy
  13. 告别996之Stream学习总结
  14. k-近邻(应用sklearn的莺尾花数据集)
  15. oracle ebs 单位类别 单位 单位转换,ORACLE_EBS_系统主数据管理(一).doc
  16. 华为H3C 交换机路由器常用命令
  17. 安卓自定义音量键_iPhone 为啥要一直保留“静音键”?
  18. 爆肝!朋友做了个编程导航网站!
  19. luoguP4098「HEOI2013」ALO
  20. 2.2.2 定点数的移位运算

热门文章

  1. excel查找空值快捷键_Excel快捷键查询
  2. 关于如何查找NXP S32K1xx系列单片机的封装信息和引脚定义
  3. 微信聊天记录加密图片还可查看??
  4. 控制工程实践(8)——PID四种类型控制器(之比例-积分控制器PI)
  5. 三轴传感器、六轴传感器、九轴传感器的文章解读
  6. mysql数据库 添加字段,修改字段,修改注释
  7. iOS-性能优化的那些事
  8. redis java jar_Redis在java开发中使用
  9. [内附完整源码和文档] 基于JAVA的干部档案管理系统
  10. matlab 读写excel数据 计算股票振幅收益率