『带你学AI』开发环境配置之Windows10篇:一步步带你在Windows10平台开发深度学习
目录
引子
深度学习环境配置说明
Windows 10 下 VSCode 安装使用
第一个深度学习案例运行与讲解
附加内容:Github简单使用方法
尾巴
留言与问题回复
系列开篇语
写深度学习博客有两年多了,从最初的做记录备忘到现在经验总结分享,积累了一些读者,也结识了不少想入门研究深度学习的朋友。有不少朋友私聊问小宋如何快速入门深度学习,我发现大部分小伙伴都是对这方面有兴趣面对网上丰富的资料却不知道如何选择与操作。从而让我萌发了写一个一步步手把手带大家如何从零开始学习,使得基础薄弱的人员能以更简单易懂的方式入门深度学习与实战开发系列教程—— 《带你学AI与TensorFlow2实战》 。
系列教程将分为以十一个部分:
1. 章节一:初探AI(《带你学AI与TensorFlow2实战一之深度学习初探》):( 已完成 )
2. 章节二:环境搭建(《带你学AI与TensorFlow2实战二之多系统开发环境与工具搭建》):( Windows10篇完成 ;Ubuntu18进行中)
3. 章节三:CV项目分类实战(《带你学AI与TensorFlow2实战三之交通标志分类项目》):
4. 章节四:CV项目目标检测实战(《带你学AI与TensorFlow2实战四之口罩检测项目》):
5. 章节五:CV项目像素分割实战(《带你学AI与TensorFlow2实战五之人体抠图
分割》):
6. 章节六:CV项目基于GAN实战图像生成(《带你学AI与TensorFlow2实战六之基于GAN生成卡通形象》):
7. NLP项目基于RNN+Attention文本分类(《带你学AI与TensorFlow2实战七之影评分类》):
8.章节八:NLP项目基于Transformer中英翻译(《带你学AI与TensorFlow2实战八之Transformer中英翻译》):
9.章节九:NLP项目基于BERT预训练模型实战(《带你学AI与TensorFlow2实战九之Bert中文文本摘要》):
10.章节十:强化学习DQN实战走迷宫(《带你学AI与TensorFlow2实战十之基于DQN实战走迷宫》):
11.章节十一:算法模型应用的部署(《带你学AI与TensorFlow2实战十一之算法模型工程化应用部署》):
旨在通过对原理的通俗讲解、学习方法的介绍培养、开发环境的手把手搭建、深度学习案例开发讲解以及算法模型应用部署使用。
这是一个开源免费的教程,希望能和更多朋友一起分享贡献,不断完善。代码与文档将同步在GitHub: https://github.com/xiaosongshine/Learn2Ai4TensorFlow2
现在正式开始AI学习之旅喽...
引子
在上篇文章中《 『带你学AI』带你学AI与TensorFlow2实战之入门初探:如何速成深度学习开发 》,通过对深度学习的简单介绍,分享了如何入门深度学习的方法,也介绍了一些学习资料与开发工具。在本文中将讲解开发环境配置,由于是图解流程会有很多图片,故将分为上下两篇,分别讲解 Windows 10 与 Ubuntu 18 。
工欲善其事必先利其器,在本篇文章中,将详细讲解 Windows 系统开发环境配置,包括 CPU 与 GPU 深度学习环境的配置与 VSCode 开发 Python 方法及 Python 简单使用。最后通过对一个深度学习案例运行与讲解,一步步带大家使用 Windows10 平台搭建出深度学习开发环境,能让大家开始动手实践。
小宋说:在本篇中,主要内容主要是实际动手操作内容,因此添加了许多操作截图,同时也在截图上进行了步骤标注与说明。所以强烈建议小伙伴们一起来动手实践,也欢迎点赞收藏并转发给需要的朋友。大家的支持是小宋继续做下去的动力。
正式开始实践动手了,建议先收藏,再一步步跟着实践,遇到问题欢迎在评论区讨论。下面多图预警。
深度学习环境配置说明
深度学习环境的配置包括以下内容:
- GPU 支持(如果硬件支持的话,可以实现加速训练)
- Python 环境(用于开发深度学习的语言)
- 深度学习框架(成熟的网络模型以及训练接口)
- VSCode 编辑器(用于编程与运行)
对于 GPU 支持部分安装与配置,这里是比较麻烦繁琐的,也较容易出问题,所以在本文中用一个简单的方式来安装配置。通过安装 NVIDIA 驱动,配合“conda”来安装“cudatoolkit”与“cudnn”,实现对 AI 运算加速的效果。在简单便捷的同时,“conda”也支持“Python”的管理与使用。
首先将带大家展示如何检测电脑是否有英伟达 GPU 以及如何安装使用。
Windows 10 英伟达 GPU 驱动安装
查看是否有 GPU 及其型号
首先要判断自己电脑是否拥有英伟达 GPU,可以通过使用“百度”搜索自身电脑型号来查看。
也可以通过“任务管理器”界面查看,具体方法如下图所示:点击下方“搜索”按钮,搜索“任务管理器”进入即可。
进入“任务管理器”后选择“性能”,如果有 GPU1(GPU0 为集成显卡)则代表是拥有独显,此时再来查看 GPU 型号即可:可以看到笔者的 GPU 为“NVIDIA GeForce RTX 2070”,先记录下来后面会用到。如果没有“NVIDIA”的前缀则不能使用。
小宋说:通过上述步骤,我们就可以判断是自己电脑是否有英伟达 GPU,这里会有些容易让初学者疑惑的地方,并非 GPU 都可以用来加速 AI 训练的,目前普遍支持好的仅有英伟达 GPU。而 Intel 的集成显卡(上图GPU 0)与 AMD 显卡暂时不能使用,期待后面这些框架支持能越来越好。
通过上述步骤,我们就可以判断是电脑是否拥有英伟达 GPU,可用于加速。如果没有的话就可以不用进行“英伟达驱动的下载与安装”,直接进行“基于 Conda 的 Python 安装”,来安装 CPU 版本的深度学习环境。
英伟达驱动的下载与安装
首先是Windows 10 英伟达驱动安装,驱动下载地址:
https://www.nvidia.com/Download/index.aspx?lang=cn#
安装如下方式搜索驱动,根据 GPU 显卡型号进行选择,“操作系统”与“下载类型”与下方一致即可,点击搜索按钮(其实 Linux 系统的驱动下载也类似,操作系统选择 Linux 即可
后会出现如下界面,再点击下载。
下载完成后打开安装即可。
进行安装时界面如下。
随后会进入安装选择,按以下操作即可。
建议安装上述步骤来选择安装,这样安装很快速使用也没问题。安装结束后关闭窗口。
下面就可以测试是否安装成功,点击下方搜索按钮,输入“cmd”,再选择“命令控制符”
进入“cmd”命令控制符窗口,输入“nvidia-smi”,成功安装后会输出以下内容:
此时 NVIDIA 驱动就已经安装成功了。
后面就可以进行 CUDA 的安装,但是这个对使用 TensorFlow2 的 GPU 版本开发并不是必须的。为了简化安装流程,减轻小伙伴负担,这里就不安装 CUDA。
小宋说:“通过安装NVIDIA驱动,配合“conda”来安装“cudatoolkit”与“cudnn”,实现对AI运算加速的效果。”的原理部分可以参考这个文章:《 显卡,显卡驱动,nvcc, cuda driver,cudatoolkit,cudnn到底是什么? 》。通过上述方式简化了安装与使用,无需手动安装cuda与cudnn软件与配置路径,推荐大家使用。
基于 Conda 的 Python 安装
Python 的安装基于的 Conda,Conda 用来管理安装 Python 环境非常方便。
这里使用的是MiniConda。Miniconda 是一个 Anaconda 的轻量级替代,默认只包含了 python 和 conda,但是可以通过 pip 和 conda 来安装所需要的包。
Miniconda 安装包可以到 https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/ 下载。
进入链接后,界面拉到最下面,选择是“Windows-x86_64.exe”后缀下载安装即可。
这里笔者使用的是Miniconda3-py39_4.9.2-Windows-x86_64.exe,下载链接:
https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/Miniconda3-py39_4.9.2-Windows-x86_64.exe
下载完成后进行安装即可,这里注意“Add Miniconda to my PATH environment variable”要勾选上,这是设置环境变量,之后就可以直接在“CMD”界面使用“conda”指令。
下面测试一下“conda”指令,打开“cmd”,输入“conda”
出现以上内容就表示安装已完成。
下面改下“conda”源,换为清华源用以下载加速,在“cmd”中复制粘贴以下指令,并回车:
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
conda config --append channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/fastai/
conda config --append channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch/
conda config --append channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/bioconda/
conda config --set show_channel_urls yes
同时我们也将“pip”换为清华源用以加速,在“cmd”中复制粘贴以下指令,并回车:
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
上面说到的“conda”与“pip”是用于管理Python包的工具。 下面介绍些cmd conda指令(env_name代表环境名称):
- 查看所有conda环境:conda env list
- 新建conda环境(env_name就是创建的环境名,可以自定义):conda create -n env_name
- 激活conda环境:conda activate env_name
- 退出当前conda环境(返回base环境):conda deactivate
- 安装和卸载python包:conda install numpy # conda uninstall numpy
- 查看已安装python包列表:conda list -n env_name
下面也介绍些pip指令(以numpy举例):
- 安装包:pip install numpy
- 卸载包:pip uninstall numpy
- 更新包:pip install --upgrade numpy
- 列举所有包:pip list
随后我们可以新建一个新建一个 Python 环境,命名(-n)为“tf23”,指定Python版本为3.7(python==3.7):
conda create -n tf23 python=3.7
出现一下界面,输入“y”,回车继续:
完成后输入: conda activate tf23 进入此环境,进入后可以看到前面了多了“tf23”,表示激活了此Python环境。
TensorFlow 的 CPU 与 GPU 版本安装
首先可以通过这个链接,看看 TensorFlow 版本对应的依赖项:
https://tensorflow.google.com/install/source#linux
可以看出,如果是安装 TensorFlow 2.4 则对应 CUDA=11.0,cuDNN=8.0;TensorFlow 2.1-2.3 则对应CUDA=10.1,cuDNN=7.6;TensorFlow 2.0,对应CUDA=10.0,cuDNN=7.6;TensorFlow 1.13.1-1.15.0,对应CUDA=10.0,cuDNN=7.6。
这个需要注意,错了版本就会导致安装GPU失败。
下面针对不同版本 TensorFlow,分别说明。
从 TensorFlow 2.1 开始,pip 包 tensorflow 即同时包含 GPU 支持,无需通过特定的 pip 包 tensorflow-gpu 安装 GPU 版本。 如果对 pip 包的大小敏感,可使用 tensorflow-cpu 包安装仅支持 CPU 的 TensorFlow 版本。
- TensorFlow 2.4/2.3/2.2/2.1 cpu版本安装
pip install tensorflow-cpu==2.4
- TensorFlow 2.4 gpu版本安装方法一(之前由于cudnn8在conda还没有更新,需要借助pytorch安装cudnn8 ,同时使用这种方法来安装TensorFlow2.4 gpu也需要在代码前面import torch:)
conda install pytorch=1.7.1 torchvision torchaudio cudatoolkit=11.0
pip install tensorflow==2.4
- TensorFlow2.4 gpu版本安装方法二(现在cudnn8在conda已经更新,也可以直接使用conda安装)
conda install pytorch=1.7.1 torchvision torchaudio cudatoolkit=11.0
pip install tensorflow==2.4
- TensorFlow 2.3/2.2/2.1 gpu版本安装
conda install cudatoolkit=10.1 cudnn=7
pip install tensorflow==2.3
- TensorFlow 2.0/1.15/1.14/1.13.1 gpu版本安装
conda install cudatoolkit=10.0 cudnn=7
pip install tensorflow-gpu==2.0
- TensorFlow 2.0/1.15/1.14/1.13.1 cpu版本安装
pip install tensorflow==2.0
通过上述指令,就可以完成对应版本安装。下面就可以对其进行测试,以 TensorFlow 2.3 的 gpu 版本举例,在“cmd”中输入:
conda activate tf23
python
然后在 Python 命令行内以此输入:
import tensorflow as tf
print(tf.__version__) # TensorFlow版本信息
print(tf.test.is_gpu_available()) # TensorFlow GPU支持
exit() #退出python命令行
结果如上图所示,TensorFlow 版本信息为 2.3,TensorFlow GPU支持为 True。同时我们也可以在看到其他 GPU 输出信息。
PyTorch 与 MXNet 的 CPU 与 GPU 版本安装
为了方便大家使用其他框架这里也介绍下 PyTorch 与 MXNet 的安装。
PyTorch 安装方法可以参考 PyTorch 官网 安装指南 :
我们可以选择安装到之前创建的“tf23”环境里,这里需要注意下 cuda 版本为 10.1,完整指令为(因为之前我们配置“conda”源的时候已经包括了Pytorch源,所以不用 再加“-c pytorch”):
conda activate tf23
conda install pytorch=1.7.1 torchvision torchaudio cudatoolkit=10.1
也可以新建一个“pytorch17”环境,指定“cuda”为10.2
conda create -n pytorch17 python=3.7
conda install pytorch=1.7.1 torchvision torchaudio cudatoolkit=10.2
如果安装 cpu 版本,只需把“cudatoolkit=10.2” 替换为 “cpuonly”即可,如下:
conda install pytorch=1.7.1 torchvision torchaudio cpuonly
MXNet的安装也很简单,安装方法可以参考 官网安装指南 。
按照系统语言以及安装方式选择好即可:
安装到“tf23”环境下完整指令为:
conda activate tf23
pip install mxnet-cu101==1.7.0
如果是安装 cpu 版本,最后一句改为:
pip install mxnet==1.7.0
最后就是测试一下是否安装成功,测试方法可以参考笔者之前博客: 『带你学AI』测试深度学习框架GPU版本是否正确安装方法
CPU版本测试一般只需 import 一下测试是否能正确导入即可。GPU 版本还需要测试 CUDA 或者 GPU 模块是否能正确调用起来。
PyTorch 测试 GPU 代码:
import torch
print(torch.cuda.is_available())
MXNet 测试 GPU 代码:
import mxnet as mx
mxgpu_ok = False
_ = mx.nd.array(1,ctx=mx.gpu(0))
mxgpu_ok = True
except:
mxgpu_ok = False
print(mxgpu_ok)
Windows 10 下 VSCode 安装使用
VSCode 的 Windows 10 版本下载地址:
https://code.visualstudio.com/sha/download?build=stable&os=win32-x64-user
下载完成后双击安装即可,安装界面如下所示,一步步默认设置即可。
安装完成后打开界面如下:
在上图左边栏中,从上到下依次为:“文件管理管理按钮”、“搜索按钮”、“代码管理按钮”、“运行与调试按钮”以及“插件管理按钮”。开发 Python 需要大家会用“文件管理管理按钮”与“插件管理按钮”功能。
插件管理按钮使用介绍:
VSCode定位是一个代码编辑器与集成开发环境(IDE)比更加轻量与灵活,需要用户自行安装一些插件来开发使用。需要我们安装对 Python 的支持插件,然后就可以愉快地使用 VSCode 开发 Python 了。
安装 Python 插件可以分为一下三个步骤,如下图所示:
还可以用类似方法安装中文支持,输入“Chinese”,搜索安装。安装完成后重启就会准换为中文菜单了。现在 VSCode 就设置好,下面可以正式开发 Python 啦。
首先我们要搞清楚三个问题:
- VSCode 如何管理项目文件
- VSCode 如何切换使用 Python
- VSCode 如何执行 Python 文件
VSCode 如何管理项目文件
VSCode 管理项目文件是通过文件夹来管理的,下面来通过演示来说明下:可以新建一个文件夹,名称叫“demo_code”。然后通过 VSCode “打开文件夹”功能打开这个文件夹:
小宋说:当然这个文件名可以随意起,原则 别用中文 ,因为可能导致。类似的路径也不应有中文。
在弹出的窗口中,找到那个文件夹,选择打开即可。
打开后,我们就可以在 VSCode 的资源管理器看到这个目录了,只是还没有文件,我们可以通过资源管理器的“新建文件”与“新建文件夹”按钮新建资源。按照下图所示,新建一个“hello.py”文件。
单击“hello.py”,就可以在右侧进行编辑代码了。输入第一行代码(要注意里面双引号要使用英语的符号,可以通过“Shift”键切换中英文符号):
print(“Hello Python”)
输入完成后按“Ctrl”+“s”键,保存代码。
VSCode 如何切换使用 Python
细心的小伙伴已经发现在上图界面左下角有了“Python 3.8.1 64-bit(conda)”提示,其实这个就是当前 Python 的环境,这个只有文件文件夹存在.py文件(我们新建了“hello.py”),而且安装 Python 插件后才能出现(上面已安装)。
此时就可以点击那个提示,进行 Python 环境选择与切换。
如下所示,就完成了 Python 环境切换(切换为了“tf23”):
VSCode 如何执行 Python 文件
VSCode如何管理项目文件与切换Python环境已经介绍完了,下面就是如何执行Python文件。
之前有介绍,VSCode 是编辑器,并无Python 集成开发环境,其实运行还是调用的系统安装的 Python(这里就是我们用conda安装的Python)。而Python执行的原理就是在“cmd”中python 某个.py文件。
首先我们在VSCode打开“cmd”终端,如下图所示:
在终端中输入(如果未激活“tf23”,需要在前面加一句conda activate tf23):
python hello.py
此时输出为“Hello Python”,则表示运行成功,以后再运行某个代码在此终端输入:
python x.py
取消或终止运行使用“Ctrl”+“c”。
这里在对 VSCode 开发 Python 做个步骤总结:
- 用 VSCode 打开某个文件夹
- 新建 x.py 文件
- 编辑代码保存
- 选择 Python 环境,在 VSCode 终端打开并激活此环境
- 运行文件:python x.py
第一个深度学习案例运行与讲解
在上面完成了环境配置及 VSCode 使用介绍,下面将通过一个简单的
小的
深度学习案例,来引入深度学习的开发介绍。
代码参考自:《简单粗暴 TensorFlow 2》: https://tf.wiki/zh_hans/basic/models.html 数据和代码也会开源在《带你学 AI》Github中: https://github.com/xiaosongshine/Learn2Ai4TensorFlow2 方便大家下载使用。
深度学习训练流程如下:
- 读取数据:读取数据与标签到内存中
- 数据处理迭代:将数据进行转换为网络能接受方式
- 网络搭建:构建网络模型
- 训练网络:对模型进行训练,优化参数
- 测试网络:训练完成后测试模型效果
下面就实际代码进行解释说明:
这里是做一个简单流程介绍,在第三章CNN分类项目中将做详细讲解。
读取数据:读取数据与标签到内存中
import os
import tensorflow as tf
import numpy as np
def load_mnist_data(path='mnist.npz'):
with np.load(path, allow_pickle=True) as f:
x_train, y_train = f['x_train'], f['y_train']
x_test, y_test = f['x_test'], f['y_test']
return (x_train, y_train), (x_test, y_test)
数据处理迭代:将数据进行转换为网络能接受方式
class MNISTLoader():
def __init__(self):
(self.train_data, self.train_label), (self.test_data, self.test_label) = load_mnist_data(path='data/mnist.npz')
# MNIST中的图像默认为uint8(0-255的数字)。以下代码将其归一化到0-1之间的浮点数,并在最后增加一维作为颜色通道
self.train_data = np.expand_dims(self.train_data.astype(np.float32) / 255.0, axis=-1) # [60000, 28, 28, 1]
self.test_data = np.expand_dims(self.test_data.astype(np.float32) / 255.0, axis=-1) # [10000, 28, 28, 1]
self.train_label = self.train_label.astype(np.int32) # [60000]
self.test_label = self.test_label.astype(np.int32) # [10000]
self.num_train_data, self.num_test_data = self.train_data.shape[0], self.test_data.shape[0]
def get_batch(self, batch_size):
# 从数据集中随机取出batch_size个元素并返回
index = np.random.randint(0, self.num_train_data, batch_size)
return self.train_data[index, :], self.train_label[index]
网络搭建:构建网络模型
class MLP(tf.keras.Model):
def __init__(self):
super().__init__()
self.flatten = tf.keras.layers.Flatten() # Flatten层将除第一维(batch_size)以外的维度展平
self.dense1 = tf.keras.layers.Dense(units=100, activation=tf.nn.relu)
self.dense2 = tf.keras.layers.Dense(units=10)
def call(self, inputs): # [batch_size, 28, 28, 1]
#print("input shape: ",inputs.shape)
x = self.flatten(inputs) # [batch_size, 784]
#print("flatten shape: ",x.shape)
x = self.dense1(x) # [batch_size, 100]
#print("dense1 shape: ",x.shape)
x = self.dense2(x) # [batch_size, 10]
output = tf.nn.softmax(x)
return output
训练网络:对模型进行训练,优化参数
num_epochs = 5
batch_size = 50
learning_rate = 0.001
model = MLP()
data_loader = MNISTLoader()
optimizer = tf.keras.optimizers.Adam(learning_rate=learning_rate)
num_batches = int(data_loader.num_train_data // batch_size * num_epochs)
for batch_index in range(num_batches):
X, y = data_loader.get_batch(batch_size)
with tf.GradientTape() as tape:
y_pred = model(X)
loss = tf.keras.losses.sparse_categorical_crossentropy(y_true=y, y_pred=y_pred)
loss = tf.reduce_mean(loss)
print("batch %d: loss %f" % (batch_index, loss.numpy()))
grads = tape.gradient(loss, model.variables)
optimizer.apply_gradients(grads_and_vars=zip(grads, model.variables))
测试网络:训练完成后测试模型效果
sparse_categorical_accuracy = tf.keras.metrics.SparseCategoricalAccuracy()
num_batches = int(data_loader.num_test_data // batch_size)
for batch_index in range(num_batches):
start_index, end_index = batch_index * batch_size, (batch_index + 1) * batch_size
y_pred = model.predict(data_loader.test_data[start_index: end_index])
sparse_categorical_accuracy.update_state(y_true=data_loader.test_label[start_index: end_index], y_pred=y_pred)
print("test accuracy: %f" % sparse_categorical_accuracy.result())
训练输入结果:
...
batch 5990: loss 0.025840
batch 5991: loss 0.056399
batch 5992: loss 0.037003
batch 5993: loss 0.064870
batch 5994: loss 0.033622
batch 5995: loss 0.034460
batch 5996: loss 0.112375
batch 5997: loss 0.030268
batch 5998: loss 0.050687
batch 5999: loss 0.080279