在ResNet中有这些有趣的跳跃连接,如上图所示。在残差网络的反向传播中,梯度除了流经这些权值向后传播,还有这些跳跃连接,这些跳跃连接是加法处理,可以分散梯度,让梯度流向之前的一部分,因此你可以训练出离图像很近的一些特征。
通过下图ImageNet上神经网络算法的深度和错误率统计,我们可以看到,神经网路层数越来约深,同时错误率也越来越低。
二、Tensorflow实战 2.1 深度学习开源框架对比深度学习框架很多,我们这里只介绍两个用的比较多的框架:
Tensorflow:TensorFlow 是一个使用数据流图(data flow graphs)进行数值计算的开源软件库, 一个用于机器智能的开源软件库。TensorFlow拥有产品级的高质量代码,有Google强大的开发、维护能力的加持,整体架构设计也非常优秀。 Google作为巨头公司有比高校或者个人开发者多得多的资源投入到TensorFlow的研发,可以预见,TensorFlow未来的发展将会是飞速的,可能会把大学或者个人维护的深度学习框架远远甩在身后。TensorFlow是相对高阶的机器学习库,用户可以方便地用它设计神经网络结构,而不必为了追求高效率的实现亲自写C++或CUDA代码。 TensorFlow也有内置的TF.Learn和TF.Slim等上层组件可以帮助快速地设计新网络 TensorFlow的另外一个重要特点是它灵活的移植性,可以将同一份代码几乎不经过修改就轻松地部署到有任意数量CPU或GPU的PC、服务器或者移动设备上。 除了支持常见的网络结构卷积神经网络(Convolutional Neural Network,CNN)、循环神经网络(Recurent Neural Network,RNN)外,TensorFlow还支持深度强化学习乃至其他计算密集的科学计算(如偏微分方程求解等)。
Caffe: Caffe是一个被广泛使用的开源深度学习框架,在Tensorflow出现之前一直是深度学习领域Github star最多的项目。Caffe的主要优势为:1.容易上手,网络结构都是以配置文件形式定义,不需要用代码设计网络。训练速度快,组件模块化,可以方便的拓展到新的模型和学习任务上。但是Caffe最开始设计时的目标只针对于图像,没有考虑文本、语音或者时间序列的数据,因此Caffe对卷积神经网络的支持非常好,但是对于时间序列RNN,LSTM等支持的不是特别充分。
2.2 Tensorflow环境搭建 2.2.1 操作系统Tensorflow支持在window、linux、mac上面运行,我搭建的环境使用的是Ubuntu16.04 64位。Tensorflow需要依赖python环境,这里默认使用python3.5作为python的基础版本。推荐使用Anaconda作为Python环境,因为可以避免大量的兼容性问题。
2.2.1 安装AnacondaAnaconda是Python的一个科学计算发行版,内置了数百个Python经常使用会使用的库,其中可能有一些还是Tensorflow的依赖库。Anaconda的Python版本要和Tensorflow版本一致,不然会存在问题。我这里下载的是Anaconda3-4.2.0-Linux-x86_64.sh。执行:
bash Anaconda3-4.2.0-Linux-x86_64.sh
安装Anconda,安装完成后,程序会提示我们是否把Anaconda3的binary路径加入到.bashrc,这里建议添加,这样以后python命令就会自动使用Anaconda Python3.5的环境了。
2.2.2 Tensorflow安装Tensowflow分为cpu版本和gpu版本,如果你的电脑上有NVIDIA显卡的话,建议装GPU版本,他会加快你训练的速度。cpu版本安装比较简单,这里就不在赘述,主要讲下gpu版本的安装。首先使用:
lspci | grep -i nvidia
查看nvidia显卡的型号,然后去https://developer.nvidia.com/cuda-gpus查看你的显卡是否支持cuda,只有支持cuda的gpu才能安装tensorflow的gpu版本。我的电脑是GeForce 940M 支持cuda。
(1) 安装CUDA和cuDNN
首先在nvidia官网上下载对应的cuda版本。这边下载是cuda_8.0.61_375.26_linux.run。这里下载会比较慢,建议使用迅雷下载。在安装前需要暂停NVIDIA的驱动X server,首先使用ctrl+alt+f2接入ubuntu的命令界面,如果进不去,有些电脑需要使用fn+ctrl+alt+f2然后执行
sudo /etc/init.d/lightdm stop
暂停X Server。然后执行如下命令安装:
chmod u+x cuda_8.0.61_375.26_linux.runsudo ./cuda_8.0.61_375.26_linux.run