由于最近刚给实验室购置的一台高性能工作站配置了win10+tensorflow-gpu 1.4环境,不免感叹网上的教程鱼龙混杂,为避免下次重装时再费一番时间寻找各种教程,特将配置流程记录于此。因为每台机器的硬件配置不同,本文不一定适合所有读者,配置前需仔细检查自己的电脑配置是否合适,不过配置原理相差无几。
本文配置环境如下:台式机(win10+ubuntu 16.0.4 LTS双系统、2T硬盘+Geforce GTX 1080)
tensoflow-gpu 1.4+python 3.5(安装anconda)
win10配置tensoflow-gpu 1.4必须要求python3(最好是3.5),不支持python2,nVidia显卡性能评分大于3,cdua 8(官方推荐)和cudnn v6(官方推荐,最好不要用v7,不然测试tensorflow时会提示找不到文件,虽然可以通过改名称解决该问题,但总觉得不太好),下面开始正式的配置。
第一步 更新Nvidia显卡驱动
配置前最好将nvidia显卡驱动更新至最新版本,可避免安装cuda时发生一些未可知的错误。点击GeForce experience可自动下载安装更新。
第二步 安装python3.5
通过安装anaconda来配置python3.5环境可便于后期对python及其扩展包的管理,在anaconda官网下载anaconda 64 windows安装包(注意此时的安装包已经升级为3.6了,后面可通过conda命令安装3.5),点击安装
一直点击默认直到下图
此处两个勾都勾上(添加环境变量,后面就不用手动添加了),然后等待安装完成即可,查看环境变量,可看到已经自动为我们添加了环境变量,在cmd窗口输入python,出现如下信息,说明已经配置好了python3.5。
第三步 安装pycharm community
去pycharm官网下载最新版的pycharm community(一款非常好用的python IDE工具),然后点击安装,
点击configure->settings,修改“project interpreter”,不会用或者暂时用不到virtual env的可以设置python编译器为system interpreter,如图
设置完毕后可以开始创建python工程文件。
第四步 安装tensoflow-gpu 1.4
pip安装—tensorflow官网推荐了三种安装tensorflow的方式,个人比较喜欢使用pip安装,简单有效。下面开始使用pip安装.
注意:一些博客中提到安装tensorflow前需要创建python3.5或python2.7的环境,如果读者安装了多个版本的python且都要用到tensoflow,则需要创建对应的python版本环境,如果只是用到一个版本,则不创建也行,或者等后期用到了再创建也不迟,本文只用python3.5.
(1)cmd下检查是否安装了pip及其版本(版本较低需升级至最新版本)
(2)修改pip下载源为清华源——Windows下更换pip源为清华源
修改源后下载速度会大大提高
(3)下载tensorflow
下载好的tensorflow在
第五步 安装cuda和cudnn
安装好tensorflow后还需要cuda和cudnn加速,cudnn是专门为deep learning准备的加速库。
1. 安装cuda——点击cuda_8.0.61_win10.exe直接安装
然后默认点击直至选择“自定义安装”
不用安装Geforce experience和驱动(之前已经更新过了)
默认安装位置开始安装
安装完成后配置cuda的环境变量
一般来说安装cuda的过程中即已配置好了cuda环境变量,若没有配置需手动配置
测试cuda是否安装成功——步骤见该作者博客第四步
提示:cuda安装地址见环境变量
图中显示如上信息表示安装成功。
2. 安装cudnn——在nvidia官网下载cudnn v6.0,解压得到一个“cuda”文件夹。
然后把cuda这三个目录下的文件分别拷贝到自己电脑cuda的安装目录下的相应文件位置
拷贝完后这时已经安装好了cudnn,下面开始导入tensorflow。
第六步 导入tensorflow并测试
注意:若导入tensorflow时出现提示找不到cuda中的某个指定文件,则建议重启电脑使环境变量生效。
成功导入后不会出现任何信息,如下图。
下面使用一个简单的例子来测试TensorFlow
结果正确,测试成功。
在pycharm中使用TensorFlow
首先检查编译器中是否导入了TensorFlow库
然后使用mnist数据集进行测试
import tensorflow as tf
# import tensorflow.examples.tutorials.mnist.input_data as input_data #下载数据集
from tensorflow.examples.tutorials.mnist import input_data # 读取下好的数据集
mnist = input_data.read_data_sets("MNIST_data", one_hot=True) # mnist数据集4个文件放在MNIST_data文件夹
x = tf.placeholder(tf.float32, [None, 784]) # 28*28维
y_actual = tf.placeholder(tf.float32, shape=[None, 10])
# 定义一个函数,用于初始化所有的权值 W
def weight_variable(shape):
initial = tf.truncated_normal(shape, stddev=0.1)
return tf.Variable(initial)
# 定义一个函数,用于初始化所有的偏置项 b
def bias_variable(shape):
initial = tf.constant(0.1, shape=shape)
return tf.Variable(initial)
# 定义一个函数,用于构建卷积层
def conv2d(x, W):
return tf.nn.conv2d(x, W, strides=[1, 1, 1, 1], padding='SAME')
# 定义一个函数,用于构建池化层
def max_pool(x):
return tf.nn.max_pool(x, ksize=[1, 2, 2, 1], strides=[1, 2, 2, 1], padding='SAME')
# 构建网络
x_image = tf.reshape(x, [-1, 28, 28, 1]) # 转换输入数据shape,以便于用于网络中
W_conv1 = weight_variable([5, 5, 1, 32])
b_conv1 = bias_variable([32])
h_conv1 = tf.nn.relu(conv2d(x_image, W_conv1) + b_conv1) # 第一个卷积层
h_pool1 = max_pool(h_conv1) # 第一个池化层
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(h_conv2) # 第二个池化层
W_fc1 = weight_variable([7 * 7 * 64, 1024])
b_fc1 = bias_variable([1024])
h_pool2_flat = tf.reshape(h_pool2, [-1, 7 * 7 * 64]) # reshape成向量
h_fc1 = tf.nn.relu(tf.matmul(h_pool2_flat, W_fc1) + b_fc1) # 第一个全连接层
keep_prob = tf.placeholder("float")
h_fc1_drop = tf.nn.dropout(h_fc1, keep_prob) # dropout层
W_fc2 = weight_variable([1024, 10])
b_fc2 = bias_variable([10])
y_predict = tf.nn.softmax(tf.matmul(h_fc1_drop, W_fc2) + b_fc2) # softmax层
cross_entropy = -tf.reduce_sum(y_actual * tf.log(y_predict)) # 交叉熵
train_step = tf.train.GradientDescentOptimizer(1e-3).minimize(cross_entropy) # 梯度下降法
correct_prediction = tf.equal(tf.argmax(y_predict, 1), tf.argmax(y_actual, 1))
accuracy = tf.reduce_mean(tf.cast(correct_prediction, "float")) # 精确度计算
sess = tf.InteractiveSession()
sess.run(tf.global_variables_initializer())
for i in range(20000):
batch = mnist.train.next_batch(50)
if i % 100 == 0: # 训练100次,验证一次
train_acc = accuracy.eval(feed_dict={x: batch[0], y_actual: batch[1], keep_prob: 1.0})
print('step', i, 'training accuracy', train_acc)
train_step.run(feed_dict={x: batch[0], y_actual: batch[1], keep_prob: 0.5})
test_acc = accuracy.eval(feed_dict={x: mnist.test.images, y_actual: mnist.test.labels, keep_prob: 1.0})
print("test accuracy", test_acc)
测试成功,现在在cmd和pycharm IDE中均能使用TensorFlow了,TensorFlow配置也就完成了。