前言:
由于电脑发生故障,重装了一下系统。所以最近需要重新搭建深度学习环境。刚好趁此机会,记录一下我的安装的和配置过程,给刚入门深度学习的小伙伴们一个参考。
文章目录
一、安装Anaconda3
首先去Anaconda官网下载Anaconda3,我安装的版本是Anaconda3 2020.02
具体安装步骤,可以参考我之前的记录:
Anaconda3+tensorflow2.0.0+PyCharm安装与环境搭建
二、安装PyCharm
首先去PyCharm官网下载PyCharm社区版,我安装的版本是pycharm-community-2020.1.3
按照提示直接安装即可,这个步骤就不赘述了!
三、安装TensorFlow2.2
首先说明一点,对于版本TensorFlow <= 2.0.0,安装TensorFlow是区分cpu和gpu的。到TF2.0.0版本之后,cpu和gpu合并了。也就是说采用命令pip install tensorflow
默认安装的是最稳定的TF2版本,同时支持cpu和gpu。
3.1 创建虚拟环境
由于不同的深度学习项目可能需要配置不同的版本,所以这里推荐使用conda建立虚拟环境,让项目间的环境隔离,互不干扰。
1)首先,从开始菜单找到并打开Anaconda Prompt。
2)然后,输入以下命令,新建一个虚拟环境
conda create -n tf2.2 python==3.7
3)等创建完毕后,进入虚拟环境
conda activate tf2.2
3.2 安装TensorFlow2.2
没有换源的情况直接下载速度会非常慢,所以这里使用国内源下载:
pip install -i https://pypi.douban.com/simple tensorflow==2.2.0
下载完成后,可以看到如下信息:
一般情况下,这就意味着安装成功了!
3.3 检查是否安装成功
1)打开PyCharm,新建一个工程 First_Project
2)配置虚拟环境
3)选择合适的解释器,然后点击OK
4)进入刚才新建的工程First_Project,新建一个python脚本mian.py,输入:
import tensorflow as tf
print(tf.__version__)
点击运行,出现以下结果表示安装成功!
输出的2.2.0即表示已安装的TensorFlow版本,红色警告是因为还没有安装Cuda和Cudnn,不能支持gpu训练。接下面就来讲解如何配置gpu。
注:如果报错提示numpy有问题,多半是因为不兼容,这时需要卸载numpy,再重新安装对应版本的numnpy1.19.3
四、安装nvidia驱动
首先,在设备管理器中查看电脑是否已经安装驱动,如果安装了就跳过这一步
如果没有安装,就需要去英伟达官网下载对应对应版本的驱动,我的显卡是RTX 2070,所以我选择对应版本的:
驱动安装的教程网上比较多,这里就不做展开了。
五、安装Cuda10.1
查看TensorFlow官网得知,TensorFlow2.2支持Cuda10.1以及Cudnn7.6.x,如下图所示:
5.1.查看电脑已装的cuda版本
Win+R—输入cmd—输入:nvcc --version
检查看到,我这台机器上的cuda是8.0版本的,比较老了,所以下面我要先进行卸载。
如果之前没有装过cuda,则掉过这一步。
5.2 安装Cuda
根据版本要求,选择 Cuda10.1下载下来,然后点击exe运行。选择自定义安装:
选择下一步,然后等待安装完成。安装完成后,在C:\Program Files
目录下可以看到这两个文件:
六、安装Cudnn7.6
首先下载 Cudnn7.6,然后进行解压。解压后如下:
然后,将解压后的文件全部复制粘贴至C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1
目录下,如下图所示:
完成之后,可再用nvcc --version
查看cuda是否安装成功:
七、检查安装与配置是否成功
在刚才新建的工程First_Project中,复制一个简单的深度学习demo至main文件中,代码如下:
代码来源:TF2.0深度学习实战(一):分类问题之手写数字识别:
import tensorflow as tf # 导入TF库
from tensorflow.keras import layers, optimizers, datasets, Sequential, metrics # 导入TF子库
# 1.数据集准备
(x, y), (x_val, y_val) = datasets.mnist.load_data() # 加载数据集,返回的是两个元组,分别表示训练集和测试集
x = tf.convert_to_tensor(x, dtype=tf.float32)/255. # 转换为张量,并缩放到0~1
y = tf.convert_to_tensor(y, dtype=tf.int32) # 转换为张量(标签)
print(x.shape, y.shape)
train_dataset = tf.data.Dataset.from_tensor_slices((x, y)) # 构建数据集对象
train_dataset = train_dataset.batch(32).repeat(10) # 设置批量训练的batch为32,要将训练集重复训练10遍
# 2.网络搭建
network = Sequential([
layers.Dense(256, activation='relu'), # 第一层
layers.Dense(128, activation='relu'), # 第二层
layers.Dense(10) # 输出层
])
network.build(input_shape=(None, 28*28)) # 输入
# network.summary()
# 3.模型训练(计算梯度,迭代更新网络参数)
optimizer = optimizers.SGD(lr=0.01) # 声明采用批量随机梯度下降方法,学习率=0.01
acc_meter = metrics.Accuracy() # 创建准确度测量器
for step, (x, y) in enumerate(train_dataset): # 一次输入batch组数据进行训练
with tf.GradientTape() as tape: # 构建梯度记录环境
x = tf.reshape(x, (-1, 28*28)) # 将输入拉直,[b,28,28]->[b,784]
out = network(x) # 输出[b, 10]
y_onehot = tf.one_hot(y, depth=10) # one-hot编码
loss = tf.square(out - y_onehot)
loss = tf.reduce_sum(loss)/32 # 定义均方差损失函数,注意此处的32对应为batch的大小
grads = tape.gradient(loss, network.trainable_variables) # 计算网络中各个参数的梯度
optimizer.apply_gradients(zip(grads, network.trainable_variables)) # 更新网络参数
acc_meter.update_state(tf.argmax(out, axis=1), y) # 比较预测值与标签,并计算精确度
if step % 200 == 0: # 每200个step,打印一次结果
print('Step', step, ': Loss is: ', float(loss), ' Accuracy: ', acc_meter.result().numpy())
acc_meter.reset_states() # 每一个step后准确度清零
点击运行,开始训练,可得到如下结果:
第一行红色的字体,表明这次成功的加载了动态库,可以使用GPU进行训练了。
如果你想进一步确定GPU的使用状态,可以在cmd命令行输入:nvidia-smi
进行查看,如下图所示:
最后,如果你在学习AI之路上,有任何问题,可以加入群聊,我们一起讨论~