在更层的堆栈中,框架被设计用于支持用户完成典型的机器学习流程。在中间层,对图计算的操作是自动化的。在最更底层,经过优化的向量被采纳。 对这些组件的不同实现,会造成框架的不一样,正如我们在下面这部分会看到的。 第三部分 各种深度学习框架的不同
这一部分的目标 列举神经网络框架设计的选择 介绍既有的框架在这些选择上的客观区别 每个主题都有两个或者更多的选择 每个选择的好处和坏处 在Chainer中实践的例子
大纲 回忆训练神经网络的步骤 对既有的框架进行快速地对比 设计选择的细节
神经网络的训练步骤(上文已经提到过)
用户典型的工作流 从编码到执行再到提升 写代码—计算反向传播—升级参数—运行用户的代码—优化图计算和扩展训练
框架设计选择 神经网络中最关键的部分 如何定义要优化的参数 如何定义参数的损失函数=如何写计算图 这也会影响用于前向传播、反向传播和参数更新的API 所有的这一切都取决于如何运行计算图 其他部分也很重要,但是大多数与运行其他类型的机器学习方法类似
对既有框架的快速对比
框架列表: Torch.nn Theano Caffe Keras Chainer MXNet TensorFlow PyTorch
Torch.nn MATLAB 类似的环境,建立在LuaJIT上 快速的脚本语言编写,CPU/GPU 支持,有统一的数列(array)后端
Theano 用于建立计算图的Python 程序包 支持图计算的优化器和编译器
Caffe 使用C++语言,神经网络的快速部署 主要聚焦于计算机视觉应用
Keras 干净的神经网络压缩API,用于Theano 和 TensorFlow 将会加入TensoFlow库
Chainer 通过动态地构建架构化的图表,支持反向传播 面向GPU,提供兼容 NumPY的数组后端
MXNet 支持混合的范式 还支持分布式计算
TensorFlow 通过分布计算快速地执行 支持一些图顶部的流动
PyTorch Torch 的Python I/F,带有通过动态图的反向传播 有C/C++后端部署,可获得高性能
框架对比:基本信息
设计选择的细节
重要的设计选择:通过用户的典型工作流进行阐述。
如何用文本格式写神经网络 以陈述式的配置文件:框架建立的神经网络层就如写在文件中一样 通过程序上的脚背写神经网络:框架提供脚本语言的API,用来搭建神经网络
以陈述式的配置文件:高移植性,较低的灵活性。 通过程序上的脚背写神经网络:低移植性,高灵活性。
例子:50层的ResNet
在Chainer 中搭建50层的 ResNet (总共100 行代码)
如何计算反向传播 通过图的反向传播 作为扩展图的反向传播 (责任编辑:本港台直播) |