DeepMind开源Sonnet:可在TensorFlow中快速构建神经网络
选自DeepMind作者:Malcolm Reynolds等机器之心编译参与:李泽南、Ellen Han
昨天,DeepMind 发布了 Sonnet,一个在 TensorFlow 之上用于构建复杂神经网络的开源库。这是继 DeepMind Lab 后,这家谷歌旗下的公司的又一次开源举措。Sonnet 的开源意味着 DeepMind 构建的模型可以更轻松地与所有开发者共享。距 DeepMind 做出决定,在整个研究机构中使用 TensorFlow(TF) 已将近一年。事实证明这是一个明智的选择——较之以往,我们很多模型的学习速度变得更快,而分布式训练中的嵌入式特征极大地简化了我们的代码。同时,我们发现 TensorFlow 的灵活性和自适应性使得为特定目的构建更高级的框架成为可能,DeepMind 内部已经开发了一个框架来用 TF 快速构建神经网络模块。我们正积极开发的这个代码库以让它更好地满足我们的研究需求,今天我们很高兴宣布今天它已开源化。我们把这个框架命名为 Sonnet。
自从 2015 年 11 月首次推出以来,围绕 TensorFlow 出现了许多更高级的库,使得很多常用任务得以更快实现。除了和现存的一些神经网络库具有许多相似性外,Sonnet 还具有一些根据 DeepMind 的研究需求设计的特性。和我们 Learning to learn 论文一同发布的代码是 Sonnet 的初级版本,其它即将发布的代码则基于我们今天发布的完整库而完成。将 Sonnet 开源化使其它在 DeepMind 内创建的模型得以在社区中共享,我们也希望社区能使用 Sonnet 将他们的研究向前推进。在最近几个月,我们也将自己的旗舰平台 DeepMind Lab开源化了,并且正和暴雪一同工作来开发一个开源 API 以支持《星际争霸 2》中的人工智能研究。还有更多的发布版即将到来,并且它们将出现在我们新的开源页面。
与 Torch/NN 类似,Sonnet 库使用面向对象的方法,允许创建定义一些前向传导计算的模块。模块用一些输入 Tensor 调用,添加操作到图里并返回输出 Tensor。其中一种设计选择是通过在随后调用相同的模块时自动重用变量来确保变量分享被透明化处理。在各类文献中,很多模型都可以被视为分层形式,如可微分神经计算机可能包含 LSTM 控制器,可以实现为包含标准线性层。我们已经发现,编写明确表示子模块的代码可以轻松实现代码重用和快速实验——Sonnet 可以在内部声明其他子模块的编写模块,或在构建时传递其他模块。
我们发现最有意义的技术是允许某些模块在任意嵌套的 Tensors 组中进行操作。循环神经网络的最佳表现形式通常是一些异构 Tensor 的集合,如果表示为一个平面列表则会容易出错。Sonnet 提供了用于处理这些层次结构的实用工具,这样在你需要更换另一种 RNN 的时候就不需要繁琐的代码更改了。我们已经对 TensorFlow 内核进行了更改,对这种用例增加了更多支持。
Sonnet 专为 TensorFlow 设计,因此它不会阻止你访问 Tensor 和 variable_scope 这样的底层细节。用 Sonnet 编写的模型可以与原始 TensorFlow 代码,及其他高级库中的代码自由融合。
Sonnet 的发布不是一次性的,我们将持续更新 Github 以使其符合 DeepMind 的内部版本。我们对目前 Sonnet 的功能还有很多想法,它们将陆续成为现实。我们非常感谢来自开源社区的贡献。
安装步骤
若想安装 Sonnet,你需要使用 bazel 依靠 TensorFlow 头文件对这个库进行编译。请按照指定步骤安装 TensorFlow:
该库兼容Linux/Mac OS X 和Python2.7。TensorFlow 的版本必须至少为 1.0.1。Sonnet 支持 TensorFlow 的 virtualenv 安装模式,以及 nativ pip 安装。
安装 BAZEL
请确保你拥有最新版本的 bazel(至少为 0.4.5 版)
Virtualenv TensorFlow 安装
如果你想使用 virtualenv,请在安装时急活你的 virtualenv,或跳过此步骤:
$ source $VIRTUALENV_PATH/bin/activate # bash, sh, ksh, or zsh
$ source $VIRTUALENV_PATH/bin/activate.csh # csh or tcsh
配置 TensorFlow 头文件
首先复制 Sonnet 和 TensorFlow 的源代码作为一个子模块:
$ git clone --recursive
然后使用 configure:
$ cd sonnet/tensorflow
$ ./configure
$ cd ../
你可以在 TensorFlow 配置期间选择建议的默认值。注意:这不会修改你现有的 TensorFlow 安装。这一步是让 Sonnet 构建于 TensorFlow 头文件上的必要步骤。
构建和运行安装程序
运行安装脚本,在临时目录中创建一个 wheel file:
$ mkdir /tmp/sonnet
$ bazel build --config=opt :install
$ ./bazel-bin/install /tmp/sonnet
pip install 生成的 wheel file:
$ pip install /tmp/sonnet/*.whl
如果已安装 Sonnet,卸载 wheel file 上之前的 pip install :
$ pip uninstall sonnet
你可以通过尝试重采样(resampler op)这样的操作来验证 Sonnet 是否安装成功:
$ cd ~/
$ python>>> import sonnet as snt>>> import tensorflow as tf>>> snt.resampler(tf.constant([0.]), tf.constant([0.]))
预计的输出应该是:
<tf.Tensor 'resampler/Resampler:0' shape=(1,) dtype=float32>
当然,如果引入了 ImportError,C++组件未找到时,请确保你没有导入复制的源代码(即在复制的资源库外调用 Python),并在安装 wheel file 前卸载 Sonnet。
- 免责声明
- 本文所包含的观点仅代表作者个人看法,不代表新火种的观点。在新火种上获取的所有信息均不应被视为投资建议。新火种对本文可能提及或链接的任何项目不表示认可。 交易和投资涉及高风险,读者在采取与本文内容相关的任何行动之前,请务必进行充分的尽职调查。最终的决策应该基于您自己的独立判断。新火种不对因依赖本文观点而产生的任何金钱损失负任何责任。