神经网络框架Chainer发布2.0正式版:CuPy独立

栏目: 后端 · 发布时间: 6年前

内容简介:神经网络框架Chainer发布2.0正式版:CuPy独立

Chainer 是一个灵活的神经网络框架,它的一个主要目标就是展现灵活性,允许我们用简单直观的方式编写出复杂的架构。近日,Chainer 发布了  v2.0.0正式版。

神经网络框架Chainer发布2.0正式版:CuPy独立

Chainer 项目链接:https://github.com/chainer

大多数现有的深度学习框架都是基于「定义-运行(Define-and-Run)」方式的,即先定义一个网络,然后用户对其输入批量梯度下降。由于网络在前向/反向计算之前已经固定,所有逻辑必须作为数据嵌入到网络架构中。所以,这样的系统(例如 Caffe)中定义的网络架构遵循声明性方法;同时,我们也可以使用命令式语言(例如,Torch、基于 Theano 的框架和 TensorFlow)来产生这样的静态网络定义。

与以上方法相反,Chainer 使用「通过运行定义(Define-by-Run)」的方式,即通过即时正向运算定义网络。更准确地说,Chainer 存储计算历史,而不是编程逻辑。这一方式可以帮助我们充分发挥 Python 中编程逻辑的力量。例如,Chainer 不需要任何技巧就可以将条件和循环加入网络定义中。通过运行定义的方式就是 Chainer 的核心理念。由于逻辑更接近于网络处理过程,这种方式让编写多 GPU 并行运算的优化方法变得简单。

在 Chainer 2.0.0 测试版推出近三个月之后,该框架刚刚推出了 2.0.0 正式版,以下是我们对新版本主要更新内容的整理。

重要更新说明

  • CuPy 已从 Chainer 中分离,现在是一个单独的包:https://github.com/cupy/cupy

  • 这意味着如果你想让 Chainer 使用 GPU 的话,你需要安装 CuPy。

  • 请在使用 GPU 前遵循安装指南:http://docs.chainer.org/en/stable/install.html

  • 与 CuPy 分离相关,我们删除了部分旧版本的 CUDA 和 cuDNN 支持。在 Chainer v2.0.0 和 CuPy 1.0.0 中支持的版本为:

  • CUDA 7.0 或更高

  • cuDNN 4.0 或更高

  • Chainer 的 repository 已从 pfnet/chainer 移动到了 chainer/chainer。旧的 URL 仍然可以通过 git 使用,但任何操作都会重新定向到新的。

  • 对 Chainer v1.x 用户:

  • 有一个升级指南介绍了与 v1 的变化之处:http://docs.chainer.org/en/stable/upgrade.html

  • 对贡献者:

  • 请再次阅读贡献者指南,其中有多处更新:http://docs.chainer.org/en/stable/contribution.html

  • 如贡献者指南所述,我们改变了开发和发布周期。主要开发将在主分支上继续进行,这将应用于 v3(包括 alpha、beta 和正式)版本,v2 的维护将在 v2 分支完成。

  • 如果你有一个修改意见,请将其置于主分支中。

发布说明

以下内容仅是在 v2.0.0b1 上的改进。请参阅 v2.0.0a1 与 v2.0.0b1 的发布说明以找到所有与 v1 版本的不同:

  • https://github.com/chainer/chainer/releases/tag/v2.0.0a1

  • https://github.com/chainer/chainer/releases/tag/v2.0.0b1

新特性和 API 变化

v2.0.0a1

统一配置:配置 Chainer 的以下四个配置现在由 chainer.config 和 chainer.global_config 对象管理

  • debug 模式(由 set_debug 配置)

  • enable_backprop 模式(由 no_backprop_mode 配置)

  • train 模式(由 train 或 test 的多种方法进行参数配置

  • type_check 模式(由 Function.type_check_enable 配置)

v2.0.0b1

  • 变量方式的更新规则

  • 每个参数变量现在都保持优化器的 update_rule 设置。用户可以编辑每个更新规则的超参数,以自定义每个参数的优化配置(例如使用不同的学习率)。每个更新规则还可以有自身的挂钩函数(hook function,例如,仅将权重衰减用于权重矩阵)。

  • 应用主动缓冲释放

  • 我们改变了计算图和变量的对象结构。变量对象不再是计算图的一部分,而是保存对作为计算图的一部分的 VariableNode 对象的引用。一些功能使变量节点不保留阵列缓冲区,从而减少内存消耗。只有最流行的功能(relu、arithemetics、concat、split_axis)支持这个功能。

  • 根据此前的基准测试,它在现代卷积神经网络的运行中节省了 33% 的内存用量。

  • 类型检查

  • 类型检查的 API 略有改变,当代码通过检查时,此更改会降低类型检查的资源消耗。

  • 加入 use_cudnn 模式

  • 我们删除了多个函数中的 use_cudnn 参数。是否使用 uDNN 现在由 hainer.config.use_cudnn 负责配置。

  • 未初始化的变量和参数

  • Variable 现在允许有一个未初始化的数据数组。这一改动简化了未初始化参数链接的改动。

  • 更改 Variable 类型以在其复制的实例(包括初始化/未初始化状态)之间共享其实际数据和渐变数组。

  • 扩展了 Evaluator 可接受的数据类型

  • 过去,我们只能将 NumPy 和 CuPy 对象提供给 chainer.training.extensions.Evaluator 的评估函数,现在没有这个限制了,任意数据类型都是允许的。

v2.0.0

  • 加入 L.StatelessGRU,更改了 L.GRU 的应用

  • input size/channels 现在是可选择的

  • Aggressive Buffer Release

  • 有关 buffer release,加入了以下功能:

  • transpose_sequence

  • select_item

  • get_item

  • array method

  • copy

  • flip functions

  • cast

  • broadcast

  • noise functions

  • pooling functions

  • broadcast (revisited)

  • stack methods

  • math functions

  • depth2space

  • chainer.config.cudnn_deterministic: cuDNN 确定模式

  • 删除 L.MLPConvolution2D 中的 wscale 选项

  • 在 parameter/link 中增加新的 API,注册到 Link/Chain

  • 在报告变量时清除图形

  • 加入 Extension.initialize 删除了 invoke_before_training

  • 让 None 可串行化

  • 当提出过时参数时,显示错误

  • 使用 cleargrads 代替 zerograds 作为默认选项

  • 修复 STM 和 GRU 之间不一致的命名

  • 为 Variable 加入 requires_grad 性质

  • repr 在 Variable 中支持类似于 numpy 的 repr

  • 清除 L.Linear 的 API 与偏差参数相关的卷积状链接

  • 删除 Optimizer 中已弃用的方法

  • 默认情况下启用偏置向量 L.ConvolutionND 和 L.DeconvolutionND

增强

  • 在 functions 和 links 中删除不必要的导入

  • 检查 v2 中不支持的旧参数以显示错误消息

  • 当 volatile 出现时显示错误

其他

  • 加入 ResNet50 示例

  • 说明文档改善

  • 在教程中加入了 chainer.config.train 章节

下载

源代码

  • https://github.com/chainer/chainer/archive/v2.0.0.zip

  • https://github.com/chainer/chainer/archive/v2.0.0.tar.gz


以上所述就是小编给大家介绍的《神经网络框架Chainer发布2.0正式版:CuPy独立》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Eloquent JavaScript

Eloquent JavaScript

Marijn Haverbeke / No Starch Press / 2011-2-3 / USD 29.95

Eloquent JavaScript is a guide to JavaScript that focuses on good programming techniques rather than offering a mish-mash of cut-and-paste effects. The author teaches you how to leverage JavaScript's......一起来看看 《Eloquent JavaScript》 这本书的介绍吧!

在线进制转换器
在线进制转换器

各进制数互转换器

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

SHA 加密
SHA 加密

SHA 加密工具