Torch7 是一个易于使用并十分高效的科学计算框架,本质上是面向机器学习算法的。Torch7 以 C 语言写成,这就保证了高效性。然而,通过 LuaJIT 接口(其提供了一种快速和直观的脚本语言),我们可以进行完全地交互(通常很方便)。此外,它还集成了支持 GPU 计算的 CUDA 环境的必要库。截至目前,Torch7 是构建任何种类拓扑结构的 ANN 原型上最常用的工具之一。事实上,Torch7 现在有很多软件包,有很大的社区和不断的更新和改进,这些都让我们可以非常简单地开发几乎任何种类的架构。 有关安装信息可以在官方网站入门部分找到:。对基于 UNIX 的操作系统,这一过程非常简单直接,而 Windows 系统即使有替代方法(https://github.com/torch/torch7/wiki/Windows),但还没有官方支持。如果已经安装了 CUDA,那么就会自动添加 cutorch 和 cunn 包,其中包含了处理 Nvidia GPU 的所有必要工具。 3 TensorFlow 3.1 简介 TensorFlow [5] 是一个用于数值计算的开源软件库,其相比于其它机器学习框架是最年轻的。TensorFlow 最初由谷歌大脑团队的研究员和工程师开发,其目的是鼓励对深度架构的研究。然而,该环境对一些数值编程领域提供了大量的合适的工具。其计算方式是在数据流图(Data Flow Graphs)概念下构想的。图的结点表示数学运算,图的边表示张量(多维数据数组)。该机器学习包的核心是用 C++写的,但其提供了一个优良的 Python API,而且有很好的文档支持。TensorFlow 主要的特征是其符号方法,该方法允许对前向模型做出一般性定义,而将对应的衍生计算留给该环境本身执行。 4 MNIST 手写字符识别 在本章节中,我们将讨论如何建立一个 2 层 ANN 以解决 MNIST [6] 分类问题,MNIST 是一个著名的手写字体识别数据集。其广泛用于测试和比较一般机器学习算法和计算视觉方法。该数据集提供 28×28 像素(灰度)的手写数字图像。训练和测试集分别包含 6 万与 1 万条样本。压缩文件可以在官网获得:,同时还有大多数常见算法的性能测评列表。 我们展示了构建的标准 2 层 ANN,其每一个隐藏层包含 300 个神经元。如图 4 所示,因为该网络是在官方网站上测评报告的架构之一,我们可以轻松地比较所得到的结果。其输入需要重塑为包含 28 · 28 = 784 个元素的一维向量以满足神经网络。每个图像最初由包含灰度像素值 [0, 255] 的矩阵所表征,并将归一化为 [0, 1] 之内。输出将是包含 10 个元素的预测向量,因为每个元素的标签将由 one-hot 编码的 10 空位二元向量组成。激活和惩罚函数在不同的环境中并不相同,这样以提供一个不同方法的概览。
图 4:面向 MNIST 数据的 2 层网络模型的一般架构 5 卷积神经网络 在本章节中,我们将介绍卷积神经网络(CNN [7, 6, 8]),该神经网络是一种重要和强大的学习架构,其广泛用于计算机视觉应用。卷积神经网络目前代表着用于图像分类任务的最先进算法,并构成了深度学习中的主要架构。我们展示了在所有提到的框架内如何构建和训练这样一个神经网络,并且还探索了其最常用的功能和在 MNIST 上进行一些试验以指出一些重要的特征。
图 8:面向 MNIST 数据的 CNN 模型的一般架构
图 9:在 MNIST 图像上用 Matlab 训练后的第一个卷积层的 5 × 5 滤波器。
图 11:在 2 × 2 最大池化的 MNIST 图像上用 Torch 训练的第一个卷积层的 5 × 5 滤波器。
图 12:在 MNIST 图像上用 TensorFlow 和所述的架构训练的第一个卷积层的 5 × 5 滤波器。 6 关键比较 (责任编辑:本港台直播) |