Ubuntu16.04环境下从Anaconda3安装到Tensorflow(gpu)及pycharm安装和测试mnist完整教程

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_40362972/article/details/79838662

本机开发环境为python3.6(本文在nvidia384已安装基础上进行教程,如未安装请参考https://blog.csdn.net/XUTIAN1129/article/details/78997633
本文教程目录
一、安装Anaconda3
二、检查自己的电脑环境是否具备安装CUDA的条件
三、安装cuda9.0
四、安装cuDNN
五、安装tensorflow
六、pycharm安装
七、tensorflow环境下安装python包
八、mnist测试

一、安装Anaconda3

1、先从官网下载对应的anaconda版本

https://www.anaconda.com/download/#linux

2、下载完成后进入下载目录执行以下语句

$ bash Anaconda3-5.1.0-Linux-x86_64.sh
#此处将文件名替换成你自己的文件名

3、接下来的安装提示按回车进入下一步,按q跳过License文档,最后输入yes确认
接下来让我们输入安装路径,没特殊情况直接回车默认路径就好
4、安装完成后程序提示我们是否把Anaconda3的binary路径加入到.bashrc,建议添加,这样以后python和ipython命令就会自动使用anaconda Python3.6环境了
5、可以在终端输入$ conda list查看是否安装成功

这里写图片描述

二、检查自己的电脑环境是否具备安装CUDA的条件

1、 验证自己的电脑是否有一个可以支持CUDA的GPU
你可以电脑的配置信息中找到显卡的具体型号,如果你是双系统,在Windows下的设备管理器中也可以查到显卡的详细信息;
你也可以在ubuntu的终端中输入命令:

$ lspci | grep -i nvidia

会显示出你的NVIDIA GPU版本信息,不过不是很详细。

我的显示为:
01:00.0 3D controller: NVIDIA Corporation Device 1c8c (rev a1)

然后去CUDA的官网查看自己的GPU版本是否在CUDA的支持列表中。
2、 验证自己的Linux版本是否支持 CUDA(Ubuntu 16.04没问题)
输入命令:

$ uname -m && cat /etc/*release

结果显示:
x86_64
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=16.04
……

3、验证系统是否安装了gcc
在终端中输入:

$ gcc –version
#version前为两个横杠

结果显示:
gcc (Ubuntu 5.4.0-6ubuntu1~16.04.9) 5.4.0 20160609
……
若未安装请使用下列命令进行安装:

sudo apt-get install build-essential

4、验证系统是否安装了kernel header和 package development
(a)查看正在运行的系统内核版本:
在终端中输入:

$ uname –r

结果显示:
4.13.0-38-generic

(b)在终端中输入:

sudo apt-get install linux-headers-$(uname -r)

可以安装对应kernel版本的kernel header和package development
结果显示:
……

升级了 0 个软件包,新安装了 0 个软件包,要卸载 0 个软件包,有 4 个软件包未被升级。
表示系统里已经有了,不用重复安装。

若以上各项验证检查均满足要求,便可进行下面的正式安装过程。如果没有满足要求的话,可以参考cuda的官方文档,里面有详细的针对每个问题的解决方案。

三、安装cuda9.0

注意:在我写这篇文章时,tensorflow还只是支持cuda9.0,不支持cuda9.1。下载时请格外注意,如果不小心安装了cuda9.1,请按以下命令卸载cuda9.1

sudo apt-get remove cuda
sudo apt-get autoclean
sudo apt-get remove cuda*

#然后在目录切换到/esr/local/下
cd /usr/local/

卸载完成后即可安装cuda其他版本

1、从cuda官网下载(直接搜索cuda9.0)

https://developer.nvidia.com/cuda-90-download-archive

这里写图片描述

(这里推荐选择以.run文件进行安装,并且如果你的nvidia版本如果过高,如390,听说在安装cuda时会自己更新到cuda9.1,我用.deb文件安装时也出现类似问题,我当前nvidia版本为384.111,输入以下命令可查看nvidia版本:cat /proc/driver/nvidia/version)
2、进入下载目录,进行安装,然后运行以下命令:

sudo sh cuda_9.0.176_384.81_linux.run

界面会出现‘更多0%’,一直按住回车,直到100%
之后键入accept

Install NVIDIA Accelerated Graphics Driver for…
键入N

Enter Toolkit Location
默认即可

其他都是Y
安装完成后:

sudo gedit ~/.bashrc

将以下内容写入文件末尾

export PATH=$PATH:/usr/local/cuda/bin  
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda/lib64  
export LIBRARY_PATH=$LIBRARY_PATH:/usr/local/cuda/lib64  

保存即可,运行以下命令使更改生效:

source ~/.bashrc

测试CUDA:

cd/usr/local/cuda/samples/1_Utilities/deviceQuery
sudo make
./deviceQuery

显示:Detected 1 CUDA Capable device(s)

四、安装cuDNN

1、下载cuDNN

https://developer.nvidia.com/rdp/cudnn-download

刚进入可能会让你注册登录
这里写图片描述
选择对应cuda9.0版本的cuDNN,这里我推荐7.04版本,如果安装超过7.04版本时,在之后的mnist测试时,会出现编译错误。
2、进入安装目录,进行文件解压

$ sudo tar -xzvf cudnn-9.0-linux-x64-v7.tgz

再设置系统环境,把解压的cuDNN文件夹里include和lib64文件夹里的文件复制到对应的/usr/local/cuda-9.0对应的文件夹里,注意先到相应目录确定文件名后再执行

$ sudo cp cuda/include/cudnn.h /usr/local/cuda-9.0/include

$ sudo cp cuda/lib64/libcudnn* /usr/local/cuda-9.0/lib64

$ sudo chmod a+r /usr/local/cuda/include/cudnn.h /usr/local/cuda-9.0/lib64/libcudnn*

五、安装tensorflow

有两种方式:
(1)源码编译安装(较复杂,而且我失败了,如果你要进行这种方式,同样参考https://blog.csdn.net/XUTIAN1129/article/details/78997633
(2)利用anaconda环境安装
接下来我将介绍第二种安装方式
1、建立conda计算环境

conda create -n tensorflow python=3.6

过程中输入y继续进行
2、激活环境,使用 conda 安装 TensorFlow

source activate tensorflow

3、安装tensorflow

pip install –ignore-installed –upgrade https://mirrors.tuna.tsinghua.edu.cn/tensorflow/linux/gpu/tensorflow_gpu-1.5.0rc1-cp36-cp36m-linux_x86_64.whl

此镜像链接可以去清华大学镜像站获取 https://mirrors.tuna.tsinghua.edu.cn/
到这里就安装完成了
4、测试tensorflow
按照图中命令输入
这里写图片描述

如果你已经看到这里,恭喜你已经安装成功了。(想那时我安装了整整一天)

六、pycharm安装

1、pycharm下载

https://www.jetbrains.com/pycharm/download/#section=linux

社区版对于我们这些学生大体够用,当然你也可以下载社区版,然后用学校邮箱进行注册,可免费使用
2、解压下载文件
进入下载目录,运行以下解压命令

tar -xzvf pycharm-professional-2018.1.tar.gz

解压后,会生成一个文件
这里写图片描述
3、进入文件bin目录,进行安装

cd pycharm-2018.1/bin
sh ./pycharm.sh

然后就是一些安装流程,这里不详细展开
4、生成快捷方式

sudo gedit /usr/share/applications/Pycharm.desktop
#也可以直接进入目录进行创建

然后在Pycharm.desktop输入

[Desktop Entry]
Type=Application
Name=Pycharm
GenericName=Pycharm3
Comment=Pycharm3:The Python IDE
Exec=sh /opt/pycharm-2018.1/bin/pycharm.sh
Icon=/opt/pycharm-2018.1/bin/pycharm.png
Terminal=pycharm
Categories=Pycharm;

注:此处opt/输入你的pycharm文件夹所在目录
5、pycharm导入tensorflow
File->Settings->Project: 项目名->Project Interpreter
这里写图片描述
点击右上角齿轮图形
这里写图片描述
选择Conda Enviroment,再选择Existing enviroment
选择你的tensorflow下的python3.6,例如我的:/home/lee/anaconda3/envs/tensorflow/bin/python3.6

七、tensorflow环境下安装python包

1、打开终端,激活tensorflow

source activate tensorflow

2、继续安装numpy、pandas、matplotlib,安装方法很简单

conda install numpy

过程中选择yes

八、mnist测试

1、下载mnist数据集
进入http://yann.lecun.com/exdb/mnist/,下载如下图四个文件
这里写图片描述
注意不要去解压下载过来的文件,然后将文件复制到你的python的Project的目录下
在pycharm输入以下代码进行测试

# load MNIST data
import tensorflow.examples.tutorials.mnist.input_data as input_data

mnist = input_data.read_data_sets("MNIST_data/", one_hot=True)

# start tensorflow interactiveSession
import tensorflow as tf

sess = tf.InteractiveSession()


# weight initialization
def weight_variable(shape):
    initial = tf.truncated_normal(shape, stddev=0.1)
    return tf.Variable(initial)


def bias_variable(shape):
    initial = tf.constant(0.1, shape=shape)
    return tf.Variable(initial)


# convolution
def conv2d(x, W):
    return tf.nn.conv2d(x, W, strides=[1, 1, 1, 1], padding='SAME')


# pooling
def max_pool_2x2(x):
    return tf.nn.max_pool(x, ksize=[1, 2, 2, 1], strides=[1, 2, 2, 1], padding='SAME')


# Create the model
# placeholder
x = tf.placeholder("float", [None, 784])
y_ = tf.placeholder("float", [None, 10])
# variables
W = tf.Variable(tf.zeros([784, 10]))
b = tf.Variable(tf.zeros([10]))

y = tf.nn.softmax(tf.matmul(x, W) + b)

# first convolutinal layer
w_conv1 = weight_variable([5, 5, 1, 32])
b_conv1 = bias_variable([32])

x_image = tf.reshape(x, [-1, 28, 28, 1])

h_conv1 = tf.nn.relu(conv2d(x_image, w_conv1) + b_conv1)
h_pool1 = max_pool_2x2(h_conv1)

# second convolutional layer
w_conv2 = weight_variable([5, 5, 32, 64])
b_conv2 = bias_variable([64])

h_conv2 = tf.nn.relu(conv2d(h_pool1, w_conv2) + b_conv2)
h_pool2 = max_pool_2x2(h_conv2)

# densely connected layer
w_fc1 = weight_variable([7 * 7 * 64, 1024])
b_fc1 = bias_variable([1024])

h_pool2_flat = tf.reshape(h_pool2, [-1, 7 * 7 * 64])
h_fc1 = tf.nn.relu(tf.matmul(h_pool2_flat, w_fc1) + b_fc1)

# dropout
keep_prob = tf.placeholder("float")
h_fc1_drop = tf.nn.dropout(h_fc1, keep_prob)

# readout layer
w_fc2 = weight_variable([1024, 10])
b_fc2 = bias_variable([10])

y_conv = tf.nn.softmax(tf.matmul(h_fc1_drop, w_fc2) + b_fc2)

# train and evaluate the model
cross_entropy = -tf.reduce_sum(y_ * tf.log(y_conv))
# train_step = tf.train.AdagradOptimizer(1e-4).minimize(cross_entropy)
train_step = tf.train.GradientDescentOptimizer(1e-3).minimize(cross_entropy)
correct_prediction = tf.equal(tf.argmax(y_conv, 1), tf.argmax(y_, 1))
accuracy = tf.reduce_mean(tf.cast(correct_prediction, "float"))
sess.run(tf.global_variables_initializer())
for i in range(20000):
    batch = mnist.train.next_batch(50)
    if i % 100 == 0:
        train_accuracy = accuracy.eval(feed_dict={x: batch[0], y_: batch[1], keep_prob: 1.0})
        print("step %d, train accuracy %g" % (i, train_accuracy))
    train_step.run(feed_dict={x: batch[0], y_: batch[1], keep_prob: 0.5})

# 显存不足错误
# print("test accuracy %g" % accuracy.eval(feed_dict={x: mnist.test.images, y_: mnist.test.labels, keep_prob: 1.0}))
a = 10
b = 50
sum = 0
for i in range(a):
    testSet = mnist.test.next_batch(b)
    c = accuracy.eval(feed_dict={x: testSet[0], y_: testSet[1], keep_prob: 1.0})
    sum += c * b
    #print("test accuracy %g" %  c)
print("test accuracy %g" %  (sum / (b * a)))

测试结果如下:
这里写图片描述
如果运行程序时出现如下错误:

2018-04-06 20:00:14.344114: E tensorflow/stream_executor/cuda/cuda_dnn.cc:378] Loaded runtime CuDNN library: 7102 (compatibility version 7100) but source was compiled with 7004 (compatibility version 7000).  If using a binary install, upgrade your CuDNN library to match.  If building from sources, make sure the library loaded at runtime matches a compatible version specified during compile configuration.

说明你的cuDNN版本不对(如果你安装的是gpu版的tensorflow),比如我的错误提示说我当前版本为7.12,但是需要7.04版本来编译。你可以使用下列命令来查看cuDNN版本

cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2

以上就是全部教程,如有问题可以私信或者评论。

本文参考
https://blog.csdn.net/XUTIAN1129/article/details/78997633
https://blog.csdn.net/qlulibin/article/details/78714596
https://blog.csdn.net/tina_ttl/article/details/51762471
https://blog.csdn.net/IIISOS/article/details/78675595
https://blog.csdn.net/iserendipity/article/details/62230564

展开阅读全文

没有更多推荐了,返回首页