65.9K
CodeProject 正在变化。 阅读更多。
Home

Windows 上的深度学习:入门指南

emptyStarIconemptyStarIconemptyStarIconemptyStarIconemptyStarIcon

0/5 (0投票)

2016年9月14日

CPOL

9分钟阅读

viewsIcon

27907

在这篇文章中,我将引导大家如何在 Windows 上安装和运行最流行的工具包之一,并运行和解释一些有趣的示例。

深度学习快速指南

深度学习是机器学习领域中相对较新的一组技术,它们在解决各种问题方面表现出强大的泛化能力,甚至解决了几年前被认为无法解决的一些问题。网上有许多教程文章介绍这些技术所以我不会深入探讨,但我会介绍基础知识。

人们早就知道,一种特定的机器学习技术——神经网络——能够通过使用在输入(例如图像)和输出(例如“这是哪个数字?”)之间映射的“隐藏层”来学习复杂的映射。

随着大数据的出现,我们突然拥有了可以输入到这些模型中的大量输入数据,并且随着 GPU 功能的不断增强,我们也具备了进行计算的能力。我们过去曾见过具有多个隐藏层的神经网络,但训练它们的成本太高,而且它们似乎没有超越其他技术,因此被弃用。有人意识到,有了我们现在拥有的数据量和可用的计算资源,这些限制不再适用,这些旧网络又被重新启用。

从那时起,网络变得越来越深(更多的隐藏层),它们的形状也变得越来越奇怪(卷积神经元、反馈回路和层跳过)。目前,我们知道它们功能强大,但我们并不真正知道它们能达到多强大,而且该领域在进步方面还有很大的空间。有关该领域更详细、更精彩的历史,请参阅NVidia 的精彩文章

在这篇文章中,我将引导大家如何在 Windows 上安装和运行最流行的工具包之一,并运行和解释一些有趣的示例。

深度学习工具包

机器学习已经存在很长时间了,有数十种框架,从底层的 C 代码到 AzureML。在深度学习领域,一些框架声名鹊起,但逐渐被“下一个大事件”所取代。很难说谁拥有最好的框架,现在很多都归结为选择它是否支持您当前和预期的需求,它是否在您的平台上运行,以及您是否可以使用您喜欢的语言对其进行编码。

Caffe是该领域的元老之一,凭借其预训练模型的“模型动物园”,它为持续的实用性提供了令人信服的理由。凭借大量的教程、良好的文档和 Python 绑定,它是一个可靠的选择。它被 Facebook 的 Lua 框架Torch取代。这在一段时间内很流行,直到它开始被更现代的基于 Tensor 的变体取代。这些基于 Tensor 的网络允许计算网络而不是层网络,并且已被证明对现代深度学习模型更灵活。

微软的CNTK和谷歌的TensorFlow都是基于 Tensor 的系统——两者都在 Linux 上运行,而 CNTK 在 Windows 上运行,TensorFlow 在 Mac 上运行。今天我将重点介绍 TensorFlow 的主要竞争对手之一——Theano。Theano 是一个 Python 绑定的库,我发现它很有用,因为它在低级 Tensor 空间中工作,但它上面构建了像KerasLasagne这样的库,允许您在更高级的抽象层思考,因此,例如,使用 Keras 定义卷积神经网络是微不足道的。这并不意味着 Theano 是最好的——事实上,如果您想查看框架的更深入比较,我推荐 Kenneth Tran 的这篇活生生的文章

Theano、Keras 和 Lasagne

在 Windows 上安装

Theano、Keras 和 Lasagne 都是 Python 库,所以我们需要做的第一件事是在 Windows 上安装 Python。对此,有几个不错的选择,但我选择WinPython有两个原因——首先,它安装时没有任何副作用,因此可以与您可能拥有的任何现有 Anaconda 或其他安装并行运行;其次,它附带了许多您需要的预装软件包(Numpy、Pandas、Sklearn)。

安装 WinPython 3.x

截至撰写本文时(2016-08-02),WinPython 3.4.4.3是 3.4 分支的最新版本,Theano 尚未支持 Windows 上的 Python 3.5(这里有一个很好的解释)。如果您在遥远的未来阅读本文,您应该前往WinPython 主页Theano 安装文档以确定要使用的版本(或者,如果您在非常遥远的未来,让您的机器人管家为您完成)。请使用 64 位版本(或者,如果您在非常非常遥远的未来,请使用 512 位版本)。

一旦你选择了你的版本,安装就像下载、双击和选择你想要的位置一样简单。由于(如上所述)WinPython 没有任何副作用,我喜欢把它放在一个开发者工具目录(c:\dev\tools\WinPython)中,这样它就很容易找到。WinPython 附带它自己的命令窗口,该窗口使用正确的路径设置进行实例化,允许你将它排除在你的路径之外,并且没有副作用。

添加最新的 Theano、Keras 和 Lasagne

现在您已经安装了 WinPython,让我们通过 pip 安装我们正在使用的三个工具包的最新和最棒的版本。启动 WinPython 命令提示符并输入 pip --version 以确保您使用的是正确的版本。它应该提到目录和版本,这样您就确切地知道您正在处理什么,然后您可以通过以下方式安装软件包:

> pip install --upgrade --no-deps https://github.com/Theano/Theano/archive/master.zip

> pip install --upgrade --no-deps https://github.com/fchollet/keras/archive/master.zip

> pip install --upgrade --no-deps https://github.com/Lasagne/Lasagne/archive/master.zip

这将直接从 GitHub 安装每个工具包的最新版本,而不会升级任何依赖项(相信我,除非你喜欢看编译器错误,否则你不会想意外升级 Numpy)。

测试您的安装

安装最新的 Theano 后,确保您可以导入库

> python

>>> import theano

这应该需要一些时间,但会成功完成。现在您可以克隆我整理在GitHub上的示例,并运行 mnist.py 示例。这将通过下载MNIST 数据集并训练分类器来识别数字图像来测试 Lasagne 和 Theano。

> git clone https://github.com/noodlefrenzy/deep-learning-on-windows.git

> cd deep-learning-on-windows

> python mnist.py

如果运行成功,您就知道您有一个可以工作的 Theano 和 Lasagne 版本。您可能想在它完成之前按 Ctrl+C,因为它会运行得相当慢。现在让它以您实际可以做一些有用的事情的速度工作。

GPU 支持

如果你有 NVidia GPU,你可以使用CUDACUdnn让你的深度学习框架运行得快得多。首先,你应该下载并安装CUDA Toolkit,然后注册 CUdnn,下载并安装它。我通常通过将 cuda 目录的内容复制到已安装的 CUDA Toolkit(对我而言,v7.5 版本位于 C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v7.5)来“安装”CUdnn。在撰写本文时(2016-08-02),Theano 不支持 CUDA 8,所以我安装了 CUDA 7.5。

安装库后,您需要将适当的环境变量 (CUDA_PATH) 设置为您的安装路径(在我的情况下是 C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v7.5)。我还会将 %CUDA_PATH%\bin 添加到我的 PATH 中,以便我可以使用各种 CUDA 工具。

安装编译器

使用 CUDA 7.5 需要安装(旧版)Microsoft 64 位 C++ 编译器——特别是 Visual Studio 2012 或 2013。有关 Windows 上 CUDA 的更多详细信息,请参阅其安装指南。对于没有 VS2013 或 MSDN 订阅的用户,请下载社区版

配置 Theano 以使用 GPU

Theano 有几个配置选项可以控制它如何构建和运行模型,所以要让它使用你的 GPU 运行,你需要重新配置它。由于这可能是你所有 Theano 代码都想要的,我在 WinPython 的 settings 目录下(对我来说,那是 C:\dev\tools\WinPython\settings)为我的整个 WinPython 安装创建了一个 .theanorc 文件。我已经在我的 GitHub 仓库中放置了一个示例 Theano 配置文件,但核心设置是

[global]
device=gpu
[nvcc]
compiler_bindir=C:\Program Files
(x86)\Microsoft Visual Studio 12.0\VC\bin\amd64
flags=--cl-version=2013

(重新)测试您的安装

现在您已经启用了 GPU 支持,再次尝试运行 MNIST 示例(python mnist.py),看看拥有 GPU 会带来多大的不同——训练单个 epoch 的时间应该会大幅缩短。

深度梦幻

我不得不承认谷歌;他们的 DeepMind 团队发表的一些文章是该领域最有趣的,尤其是他们介绍“深度梦幻”和“神经网络艺术品”的文章。我们可以使用 Keras 复制类似的结果,使用我的存储库中的 deep_dream.py 示例。该程序使用 VGG16 网络(来自视觉几何组)的卷积层和预训练权重(从 Caffe 转换)。VGG16 是 2014 年 ImageNet 竞赛 (ILSVRC) 的顶级模型,被认为是一个很好的试验场,因为它表现出色,而且其结构相对容易理解。

假设您已将预训练权重安装在 C:\dev\data 中,并且正在针对 C:\dev\images\ninjacat.png 运行,您可以使用以下命令:

> python deep_dream.py --weights_root c:\dev\data c:\dev\images\ninjacat.png ninjadream

这将变为

into

如果您遇到错误,这可能是由于 Keras 或 Theano 的工作方式或它们与 CUDA 或 CUdnn 集成的方式发生了变化——它们都处于非常活跃的开发中。如果是这样,请查看 Keras 的官方 deep_dream.py 示例——我的副本只是增强了参数处理并对一些内容进行了分解,使其更容易上手。

神经艺术

神经艺术最早出现在一篇来自德国的论文中,此后成为深度学习强大功能的另一个重要展示示例。从本质上讲,它的工作原理是采用一个现有的训练好的卷积神经网络,并使用它将两个图像卷积在一起,通过连接来自每个图像的不同卷积层的输出。假设(再次)您已将 VGG16 预训练权重安装在 C:\dev\data 中,并且正在以“呐喊”(您在 C:\dev\images\thescream.png 中拥有)的风格运行 C:\dev\images\ninjacat.png,您的命令将如下所示:

> python neural_style_transfer.py --weights_root c:\dev\data c:\dev\images\ninjacat.png
c:\dev\images\thescream.png ninjascream

那会变成

into

再次强调,如果您遇到错误,请尝试官方 neural_style_transfer.py 示例——我的副本只是将参数处理拆分出来,让您可以尝试用于传输的层。

结论与未来工作

在 Windows 上设置深度学习工具包相当容易,即使您在该领域没有任何背景,他们也使其非常容易进行实验。Windows 版 TensorFlow即将推出,但受限于 Bazel 支持——一旦推出,我将在我的博客上创建一篇后续文章,并介绍一组类似的示例,但在那之前,没有任何东西能阻止您在 Windows 机器上加入深度学习革命。

更多机器学习实战

好奇你还能做些什么?查看这些关于机器学习的有用资源:

© . All rights reserved.