加入巨头竞争之列,索尼开源可在Windows中运行的神经网络库NNabla

2017 年 6 月 28 日 机器之心

选自Sony

机器之心编译

参与:蒋思源、李泽南


索尼昨天宣布开源了自己的神经网络库 NNabla,其中包含用于深度学习系统的 Python API 与用于嵌入式设备的 C++ API。彭博社也表示索尼正在加入谷歌、Facebook 和亚马逊等巨头的人工智能开发竞争。


神经网络是深度学习模型的核心,后者自 2012 年在图像识别领域获得突破性进展以来获得了人们的广泛关注。现在,深度学习已经在很多领域中获得应用,它不仅仅是一种图像识别的算法,也是一种用于建模的黑箱系统。


用于处理深度学习模型的架构各有不同:从小到大,从前馈到循环,从非监督到监督……对于深度学习技术的研究发展也有很快速度,新的架构、组件或神经网络每天都在出现。目前装备 GPU 的高性能深度学习计算机或集群,对于运行深度学习的移动设备、物联网设备的要求也在催生技术的发展。


索尼从 2010 年起就加入了深度学习的研究行列。这次开源的深度学习核心库已是其研究成果的第三代了,它包含以下特性:


  • CUDA 兼容性。

  • 它拥有 Python API,因此最大化了设计神经网络模型的灵活性,并且还能支持快速的原型设计和测试。

  • 同时支持静态和动态计算图(computation graphs)。静态计算图在速度和内存上有更高的效率,而动态计算图在设计模型上更加灵活。

  • 有各种内置的神经网络模块,如函数、算子和优化器等。该神经网络库的模块软件架构允许开发者添加新的模块,因此开发者可以基于新的研究思路实现更快的原型设计、产品或服务部署。

  • 它由轻便、轻量的 C++11 核所编写,并能在多个平台上运行。该框架已经在 Linux (Ubuntu 16.04) 和 Windows (8, 10) 上进行了测试。

  • 极高的速度和内存效率。计算图引擎允许安全的原位计算(in-place computation)和内存分享,这将极大地将少内存的占用。因此该框架的设计仅采用少量的计算负载就能执行前向和后向传播。

  • 为各种计算方案而设计的解耦合实现(Decoupled implementation)接口允许为每一个计算方案提供插件式的开发方案。开发者可以更关注函数算子实际计算的特定实现,而不用管计算图引擎与其内存优化等。


索尼官方将很快发出更具体更详细的神经网络库使用方法。


索尼表示他们的神经网络库提供了最基本的深度学习开发研究和部署的函数。他们希望该软件库能推动人工智能的发展,并且不论是在先进研究领域还是前沿应用部署上都能提供强有力的助力。


  • 项目地址:https://github.com/sony/nnabla

  • 说明文档:https://nnabla.readthedocs.io/

  • 项目官网:https://nnabla.org/


下面是该神经网络库的 Github 项目介绍:



NNabla 是一个深度学习框架,计划在研究,开发与生产领域当中使用。索尼的目标是让它可以在任何地方运行,就像个人笔记本电脑、高性能计算集群、嵌入式装置和生产服务器一样。因此索尼希望通过提供高效便捷的机器学习库而将算法嵌入到边缘设备中。


安装


安装 NNabla 很简单:


pip install nnabla


这是 CPU 版本的 NNabla,GPU-加速器可以通过安装 CUDA 工具包来添加:pip install nnabla-ext-cuda


特征


简单,灵活并且有表现力


基于 NNabla C++11 内核的 Python API 给你提供了灵活性和高产出效率。例如,一个带有分类损失的两层神经网络可以仅通过以下 5 行代码被定义(超参数由<>括出)。


import nnabla as nn
import nnabla.functions as F
import nnabla.parametric_functions as PF

x = nn.Variable(<input_shape>) t = nn.Variable(<target_shape>) h = F.tanh(PF.affine(x, <hidden_size>, name='affine1')) y = PF.affine(h, <target_size>, name='affine2') loss = F.mean(F.softmax_cross_entropy(y, t))


训练可以通过以下步骤来完成:


import nnabla.solvers as S

#
Create a solver (parameter updater)
solver = S.Adam(<solver_params>) solver.set_parameters(nn.get_parameters())

#
Training iteration
for n in range(<num_training_iterations>):    
   # Setting data from any data source    x.d = <set data>    t.d = <set label>    # Initialize gradients    solver.zero_grad()    
   # Forward and backward execution    loss.forward()    loss.backward()    
   # Update parameters by computed gradients    solver.update()


动态计算图使网络结构的执行时间变得灵活。NNabla 可以使用静态和动态图的模型,在两种情况下都使用相同的 API。


x.d = <set data>
t.d = <set label>
drop_depth = np.random.rand(<num_stochastic_layers>) < <layer_drop_ratio>
with
nn.auto_forward():    h = F.relu(PF.convolution(x, <hidden_size>, (3, 3), pad=(1, 1), name='conv0'))    
   for i in range(<num_stochastic_layers>):        
       if drop_depth[i]:            
           continue  # Stochastically drop a layer        h2 = F.relu(PF.convolution(x, <hidden_size>, (3, 3), pad=(1, 1),                                   name='conv%d' % (i + 1)))        h = F.add2(h, h2)    y = PF.affine(h, <target_size>, name='classification')    loss = F.mean(F.softmax_cross_entropy(y, t))
# Backward computation (can also be done in dynamically executed graph)
loss.backward()


便携式和多平台


  • Python API 能够在 Linux 和 Windows 上使用。

  • 大多数函数库的代码都是使用 C++11 写的,所以可以部署到嵌入设备中。


可扩展性


  • 可以像神经网络运算符和优化器那样添加新的模块。

  • 该软件库允许开发者添加特定的实现(如在 FPGA 上的实现等)。例如我们提供 CUDA 后端作为扩展,这将可以利用 GPU 加速计算来加速算法。


高效性


  • 在单块 CUDA GPU 上速度极快

  • 内存优化引擎

  • 支持多 GPU(即将可用)


文档


  • https://nnabla.readthedocs.org 


安装


  • https://nnabla.readthedocs.io/en/latest/python/installation.html


入门指南


  • 在 tutorial 页面中可以找到很多 Jupyter notebook 教程。我们建议由 by_examples.ipynb 开始在 NNabla 学习第一个案例,python_api.ipynb 文档介绍了 NNabla API。

  • 我们同样在 examples 中提供了一些其他复杂的案例。 



本文为机器之心编译,转载请联系本公众号获得授权

✄------------------------------------------------

加入机器之心(全职记者/实习生):hr@jiqizhixin.com

投稿或寻求报道:editor@jiqizhixin.com

广告&商务合作:bd@jiqizhixin.com


点击阅读原文,查看机器之心官网↓↓↓

登录查看更多
0

相关内容

来自日本的世界电子巨头,曾经消费电子领域的霸主、便携性数码产品的开创者和先导者。旗下产品众多,拥有如 Walkman 音乐播放器、VAIO 电脑、Xpedia 手机、BRAVIA 电视、PlayStation 游戏机、Handycam 摄影机、Cyber-shot 和 α 照相机等品牌,拥有数码电子方面无数的先进专利和技术实力,更有世界领先水平的专业领域器材和 CMOS 元件。 不仅如此,索尼还涉及电影、音乐、银行保险等其他行业。
【Google】利用AUTOML实现加速感知神经网络设计
专知会员服务
29+阅读 · 2020年3月5日
复旦大学邱锡鹏老师《神经网络与深度学习》书册最新版
神经网络与深度学习,复旦大学邱锡鹏老师
专知会员服务
116+阅读 · 2019年9月24日
AutoKeras:谷歌 AutoML 的杀手!
云头条
3+阅读 · 2018年8月2日
深度学习开发必备开源框架
九章算法
12+阅读 · 2018年5月30日
机器学习者必知的 5 种深度学习框架
深度学习世界
7+阅读 · 2018年5月3日
Python 杠上 Java、C/C++,赢面有几成?
CSDN
6+阅读 · 2018年4月12日
2017年四巨头的深度学习框架之战,你支持谁?
全球人工智能
6+阅读 · 2017年12月29日
TensorFlow神经网络教程
Python程序员
4+阅读 · 2017年12月4日
10个深度学习软件的安装指南(附代码)
数据派THU
17+阅读 · 2017年11月18日
Arxiv
24+阅读 · 2020年3月11日
Augmentation for small object detection
Arxiv
11+阅读 · 2019年2月19日
q-Space Novelty Detection with Variational Autoencoders
Arxiv
3+阅读 · 2018年3月13日
Arxiv
10+阅读 · 2018年2月17日
Arxiv
5+阅读 · 2018年1月30日
Arxiv
20+阅读 · 2018年1月17日
VIP会员
相关资讯
AutoKeras:谷歌 AutoML 的杀手!
云头条
3+阅读 · 2018年8月2日
深度学习开发必备开源框架
九章算法
12+阅读 · 2018年5月30日
机器学习者必知的 5 种深度学习框架
深度学习世界
7+阅读 · 2018年5月3日
Python 杠上 Java、C/C++,赢面有几成?
CSDN
6+阅读 · 2018年4月12日
2017年四巨头的深度学习框架之战,你支持谁?
全球人工智能
6+阅读 · 2017年12月29日
TensorFlow神经网络教程
Python程序员
4+阅读 · 2017年12月4日
10个深度学习软件的安装指南(附代码)
数据派THU
17+阅读 · 2017年11月18日
Top
微信扫码咨询专知VIP会员