0%

TensorFlow与mnist数据集

学习深度学习,mnist数据集是我们第一个必须要了解的数据集。

该数据集是keras自带的,直接调用即可。当我们使用keras的时候,你只需要导入keras.datasets.mnist,然后调用load_data()方法即可将数集下载下来。

安装TensorFlow

我们都清楚keras是基于TensorFlow的,所以需要先安装TensorFlow。安装TensoFlow的过程还是比较简单的,按下面步骤操作即可:

  • 首先升级pip
    1
    python -m pip install --upgrade pip
  • 然后安装TensorFlow
    1
    pip install tensorflow
    这样我们就将 TensorFlow 安装好了。

但需要注意的是,此时你安装的tensorflow很可能是CPU版本,即使你电脑上安装了Nvidia的GPU也是如此

原因在于,Windows上必须安装CUDA Driver 和 特定版本的 CUDA ToolkitcuDNN,才能装上带GPU的TensorFlow。TesnsorFlow的安装文档中对此有明确的说明,文档在这里。总之在Native Windows 上安装带GPU的TensorFlow是很麻烦的事,因此不建议使用这种方法安装TensorFlow。

当然,还有另外一种在Windows上安装GPU版TensorFlow的方法,即WSL2。在TensorFlow官网上也有相关的说明,地址在这里

为了让你在Windows下能够安装上带GPU的TensorFlow,下面我就详细介绍一下在WSL2上安装TensorFlow的方法。

在WSL2下安装TensorFlow

首先,为你的GPU安装CUDA驱动程序,该驱动程序只要在Windows上安装一次就好了,不需要在WSL2上安装,因为WSL2也是通过这个驱动来控制GPU的。

另外,如果你的GPU比较新,CUDA驱动下载最新版本即可,新版驱动一般都前兼容两三年前的老版本,驱动的下载地址在这里

但如果你的GPU比较旧,那就需要在Windows上安装旧版本的驱动,否则你的GPU可能会出问题。

当CUDA Driver安装好之后,你可以使用下面命令查看安装的CUDA Drivder版本:

1
nvidia-smi

接下来,安装WSL2,具体的安装方法可以参考这里

我建议你直接安装WSL2默认的Ubuntu系统,这样可以降低我们的安装难度,必竟我们的重点是学习深度学习,而不是学习如何在Windows上安装最优的WSL2。

因此,只要你在PowerShell中执行下面代码就可以将WSL2安装好了:

1
wsl --install

注意,在执行上述操作之前,如果你的Windows系统提示你有更新,一定要先将系统更新再安装WSL2,否则会失败。

此外,当Ubuntu安装好之后,需要重启一下Windows系统。

至此,我们就将WSL2安装好了。

当然光有WSL2还不够,接下来我们需要按照TensorFlow安装文档中的说明安装CUDA ToolkitcuDNN

安装CUDA Toolkit 和cuDNN

在安装 CUDA Toolkit 和 cuDNN 之前,我们要弄清楚CUDA Driver 和 CUDA Toolkit 及 cuDNN 的关系。它们之间的关系如下:

  • CUDA Driver 是CUDA Toolkit 和 cuDNN 的基础,用于接收上层的指令控制GPU工作。

  • CUDA Toolkit 是CUDA Driver 的上层,用于封装GPU的指令,方便应用层调用。同时它还提供了一些工具,如nvcc 编译器,用于编译CUDA代码;还有调试工具,如Nsight,用于调试GPU程序。

  • cuDNN 是CUDA Toolkit 的上层,为神经网络提供了方便的API,如卷积层、池化层等。

CUDA Driver 和 CUDA Toolkit 及 cuDNN 的关系搞清楚后,接下来我们就看看如何安装CUDA Toolkit 和 cuDNN。

需要特别注意的是,在安装 CUDA Toolkit 和 cuDNN 时,我们需要先确认一下TensorFlow的版本以及它所需要的 CUDA Toolkit 及 cuDNN 的版本。如下表示所(官方详细对应表):

VersionPythonversion CompilerBuild toolscuDNNCUDA
tensorflow-2.16.13.9-3.12Clang 17.0.6Bazel 6.5.08.912.3
tensorflow-2.15.03.9-3.11Clang 16.0.0Bazel 6.1.08.912.2
tensorflow-2.14.03.9-3.11Clang 16.0.0Bazel 6.1.08.711.8

我们以表格中的第一项为例,对上述表格进行下说明。如果你要安装tensorflow 2.16.1这个版本,那你使用的python可以是3.9到3.12之间的任一版本;而安装的CUDA toolkit版本必须是12.3,cuDNN版本必须是8.9。

只有严格的按照上述配置环境才能将带GPU的TensorFlow安装成功。

CUDA toolkit各版本的下载地址在这里, cuDNN各版本的下载地址在这里。实际上,在WSL上使用apt-get安装cuDNN更方便,具体命令如下:

1
sudo apt-get install libcudnn8

注意,当将CUDA toolkit和cuDNN安装好后,需要重启一下WSL,命令如下:

1
sudo reboot

接下来就可以安装TensorFlow了,命令如下:

1
pip install tensorflow[and-cuda]

至此,我们就将带GPU的TensorFlow安装好了,接下来,我们来测试一下TensorFlow是否安装成功吧。

环境测试

安装完TensorFlow之后,我们来测试一下TensorFlow是否安装成功,使用下面代码即可:

1
2
3
4
5
6
7
8
import tensorflow as tf
gpus = tf.config.experimental.list_physical_devices('GPU')
if gpus:
for d in gpus:
print(d.name)
print("GPU is installed")
else:
print("GPU is not installed")

如果执行这段代码输出的结果是:GPU is installed,则说明安装成功。

下载mnist数据集

TensorFlow中提供了下载mnist数据集的方法,我们只需要调用load_data()方法即可。代码如下:

1
2
3
4
from keras.datasets import mnist
(x_train, y_train), (x_test, y_test) = mnist.load_data()
print(x_train.shape)
print(y_train)

如何将显示mnist数据集中的图片呢?我们可以使用OpenCV库来显示图片,也可以使用matplotlib库来显示图片。

首先我们来看一下如何使用OpenCV库来显示图片的,代码如下:

1
2
3
4
5
6
7
8
import cv2

# 显示前8张图片
for i in range(8):
img = x_train[i]
cv2.imshow("img", img)
cv2.waitKey(0)
cv2.destroyAllWindows()

下面是使用matplotlib库来显示图片的,代码如下:

1
2
3
4
5
6
7
import matplotlib.pyplot as plt

# 显示前8张图片
for i in range(8):
plt.imshow(x_train[i], cmap='gray')
plt.title('Label: ' + str(y_train[i]))
plt.show()

通过上面的代码,我们就可以看到mnist数据集中的图片了。

mnist数据集的存储位置

当我们调用load_data()将mnist数据集下载下来后,该数据存放在哪了呢?在不同的系统下,存放的位置是不一样的。

在Windows下,它存放在下面这个目录里:

1
C:\Users\<username>\.keras\datasets\mnist.npz

需要注意的是,在Windows下刚下载完mnist数据集时,并不会产生.keras目录,一般在我们重启电脑后,才会创建该目录。

在MacOS下,它存放在下面这个目录里:

1
/Users/<username>/.keras/datasets/mnist.npz

同样的,在Linux下它存放在下面这个目录里:

1
/home/<username>/.keras/datasets/mnist.npz

有的同学可能很好奇,.npz文件是什么文件?以前从来没见过。其实,.npz是 一种特殊的压缩文件,用于存储多个NumPy数组。当你使用NumPy的np.savez()或np.savez_compressed()函数时,可以将多个数组保存到一个.npz文件中。这些文件内部包含了一系列的.npy二进制文件,每个.npy文件对应一个数组。.npz文件格式通过压缩这些.npy文件来减少磁盘空间的占用。

小结

本文详细介绍了TensorFlow的安装以及加载MNIST数据集的流程,希望本文对你入门tensorflow有所帮助。

欢迎关注我的其它发布渠道