Python这门语言最近两年特别火,笔者刚入大二在老师的建议下,开始学习python,在学习的过程中也逐渐感受到python的魅力,后来也因此进入了深度学习的领域,开始了解有关的知识,而我选择的工具是谷歌的深度学习框架TensorFlow(以下简称TF),在安装TF的过程中也遇到了许多困难,在此整理出来,希望能对看到这篇文章的人有所帮助。
TensorFlow是Google的第二代大规模分布式深度学习框架,它的前身是Google的神经网络算法库DistBelief,TF被广泛应用于各类机器学习(Machine Learning),比较常见的例如Google的神经网络机器翻译等等。
TF有多种语言接口,在本篇文章中使用的是Python API进行学习。TF有CPU和GPU两种,如果选择GPU版本的TF,就需要CUDA和cudnn的支持,虽然安装比较麻烦,但能够享受到GPU加速效果,相对而言CPU版本则无需这两者的支持,但运算速度相对就比较慢。
目前python安装有两种选择,一是直接安装python原生的解释器,另一种是通过安装Anaconda这个python的发行版本来管理。本文选择后者。(注:如果同时安装两种会发生冲突)
Anaconda是一个开源的python发行版本,包含大量的科学包,例如numpy、conda等等,如果只需要一部分包,可以选择使用Miniconda这个较小的发行版,(仅包含conda和python)。
下载地址
Anaconda官网下载
(笔者在这里推荐去清华大学的开源软件镜像站下载对应版本的Anaconda,笔者使用的anaconda 3.5.2版本对应python3.6 ,如果需要最新版可在anaconda官网下载最新版)
注:据笔者了解,如果安装的是py37版本可能在安装TF的过程中出现许多问题,相对而言py36和py35则比较稳定。
清华开源软件镜像站
这一步是选择在此电脑上使用Anaconda的用户,可以选择just me(也就是只有当前登录的账户可以使用),而All Users则是在电脑上创建的所有用户都可以使用。
第二步是安装路径,因为笔者选择的是完整版的Anaconda,占据空间比较大,所以安装到了D盘,而非C盘。
第三步:上面的选项是自动将Anaconda的环境变量配置好,下面的选项是将Anaconda设置为默认的Python解释器。因为笔者选择了用Anaconda来管理Python,所以两个都选了。当然上面的选项可以不选,但是安装之后需要手动的设置环境变量。
有人也许会感到疑惑,为什么我们要用Anaconda下的conda去管理我们的python包,通常的python用pip去管理不也是挺好的吗,在这里我简单说一些两者的共同之处和不同之处。
不管是pip还是conda,当我们通过这两种方法安装包时,由于这些包是在外网,所以免不了出现网速过慢导致下载失败的原因,我们的解决方法也有两种。
Name | URL:pip |
---|---|
清华 | https://pypi.tuna.tsinghua.edu.cn/simple/ |
中科大 | https://pypi.mirrors.ustc.edu.cn/simple/ |
阿里云 | https://mirrors.aliyun.com/pypi/simple/ |
豆瓣 | http://pypi.douban.com/simple/ |
conda解决办法
传送门
(注:.condarc文件可以在C盘用户目录下找到,最简单直接的方法就是将图中配置信息直接复制,覆盖目标文件内容)
Example:
conda install -c 镜像名 tensorflow-gpu=2.0.0
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple/ tensorflow-gpu==2.0.0
安装cpu版本相对于gpu版本就简单的多,我们通过conda命令创建虚拟环境来安装。
第一步打开 Anaconda 的命令行界面Anaconda Prompt
如果用不惯命令行界面也可以选择使用Anaconda的图像界面——Anaconda Navigator,可以自行摸索使用。
进入命令行界面后,可以看一下当前有几个环境,输入
conda env list
刚开始只有一个 base 环境
下面来创建 python 环境,笔者选择的是py3.6,输入
注:笔者已经将conda的源设置为清华的源
conda create -n tensorflow python=3.6
首先查看是否创建成功
conda env list
activate tensorflow
如果要退出当前环境回到base环境,则输入
deactivate
接下来进入tensorflow环境,输入下列指令安装TensorFlow-cpu
conda install tensorflow
注意事项:目前使用GPU版本的TF,要求电脑显卡为NVIDIA公司的产品。这是因为安装GPU版本的 tf 需要CUDA和cudnn的支持,而CUDA和cudnn支持N卡。
由于如果在新的虚拟环境中安装TensorFlow-gpu过于麻烦,笔者现在没有找到一个完美的方法,如果以后有好的办法我会及时更新。我们可以在base环境下直接安装TensorFlow-gpu。
CUDA和cudnn的版本是一一对应的,而不同的版本支持的tensorflow-gpu的版本也不一样,目前据笔者了解,CUDA基本都可以支持 tensorflow-gpu 1.xxxx 版本,如果选择的是 tensorflow 2.xxxx 版本的则需要 CUDA10之后的版本。
由于笔者刚刚接触 tensorflow ,所以我选择的是2.0版本的tf-gpu,我也建议如果你是初学者还是学习新版的比较好。
下面介绍如何安装:
下面给出目前版本需求
打开NVIDIA控制面板,点开左下角系统信息,查看版本号。
(注:要安装 TF2.0以后的版本需要升级驱动,下载方法如下,进入官网)
NVIDIA官网传送门
下载 GeForce Experience 程序升级驱动
建议大家下载 CUDA10 和对应的cuDNN
下面给出链接:
CUDA下载传送门
进入后是最新版的CUDA下载,下面介绍如何找到旧版CUDA
点击 Release Notes
cuDNN传送门
进入后需要登陆加入NVIDIA的一个计划,可以选择用QQ或者微信登录,有可能网速较慢。
也有可能会填写一些信息
完成后进入下载界面
如果需要更早的版本,可以点击图中下方的 Archived cuDNN Releases查看归档版本。一定要注意版本和CUDA对应。
笔者选择的VS2017 community + CUDA10.0 + cuDNN10.0来进行安装
注: CUDA的安装最经常遇到的错误就是提示 visual studio integration ,这是因为你的电脑上安装有微软的Visual Studio这个IDE,而CUDA的安装程序会检测出电脑已经有这个集成环境了,面对这个问题,很多人会选择在CUDA的自定义安装中取消掉Visual Studio这个选项,其造成的结果就是在VS中创建新项目的时候找不到CUDA这个选项。
然后我去翻了一下CUDA10的文档(多看看官方文档还是有用的)
发现我装的是VS2019,CUDA10.2倒是支持VS2019,但是后续安装TensorFlow时,又会出现一些找不到CUDA模块的问题, 所以还是用CUDA10吧。果然换了VS2017,再来安装CUDA10就成功了。
成功安装CUDA后,还有一个重要的步骤:配置环境变量
我们可以看到系统变量下已经有CUDA_PATH了,但这还不够,还要添加一些
打开环境变量下的 Path 路径,可以看到
一开始只有上面两个路径,我们需要添加第三条路径,也就是对应目录下 \lib\x64 这个目录。
对于TensorFlow而言,真正实现加速的是cuDNN,然后cuDNN调用的是CUDA显卡驱动。所以我们最后要配置cuDNN这个模块。
cuDNN全称为 NVIDIA CUDA® Deep Neural Network library,是NVIDIA专门针对深度神经网络(Deep Neural Networks)中的基础操作而设计的基于GPU的加速库。
下载好对应版本的cuDNN后解压后,将里面的
这三个目录复制到CUDA的安装目录下 例如笔者这样 C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.2
粘贴合并掉文件就行了
(注:到这里就算是成功安装CUDA和cuDNN了)
进行到这一步,基本的环境已经搭建完成,而安装 tf-gpu 这一步,根据笔者的了解,其实大部分遇到的问题是不同包的版本和 tf 版本的匹配问题, 我们可以根据 cmd 中提示的错误或警告信息在网上找到如何去升级或降级相应的包
在这里我简单列出一些可能会遇到的错误,当然不一定只有这些
笔者选择使用 pip 来安装 tensorflow-gpu
输入命令如下
先升级一下pip,输入
python -m pip install --upgrade pip -i https://pypi.tuna.tsinghua.edu.cn/simple/
然后开始安装tensorflow-gpu
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple/ tensorflow-gpu==2.0.0
关于安装哪个 tf 的版本,可以自行选择。
出现错误无法完全卸载 wrapt ,这个错误笔者在网上找了一下许多人遇到过,具体的解决方法如下:
解决方法
pip install --upgrade --ignore-installed wrapt enum34 simplejson netaddr -i https://pypi.tuna.tsinghua.edu.cn/simple/
最后就可以继续我们的TensorFlow-gpu的安装
因为我们安装的是TensorFlow-gpu 2.0版本,其中的一些方法还是和1.0版本不一样的,下面让我们来开始TensorFlow的学习吧。
下面是TensorFlow官方给出的一段代码
import tensorflow as tf
mnist = tf.keras.datasets.mnist
(x_train, y_train),(x_test, y_test) = mnist.load_data()
x_train, x_test = x_train / 255.0, x_test / 255.0
model = tf.keras.models.Sequential([
tf.keras.layers.Flatten(input_shape=(28, 28)),
tf.keras.layers.Dense(512, activation=tf.nn.relu),
tf.keras.layers.Dropout(0.2),
tf.keras.layers.Dense(10, activation=tf.nn.softmax)
])
model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])
model.fit(x_train, y_train, epochs=5)
下面也给出1.0版本的 hello world
import tensorflow as tf
hello = tf.constant("Hello World!")
sess = tf.Session()
sess.run(hello)
如果你能坚持看到最后,这就是对笔者最好的肯定。学习的道路是枯燥的,但是我们唯有坚持才能获得成功。期待我们能够为TensorFlow社区做出更多的贡献。