NNabla是一个深度学习框架,计划在研究,开发与生产领域当中使用。索尼的目标是让它可以在任何地方运行,就像个人笔记本电脑、高性能计算集群、嵌入式装置和生产服务器一样。因此索尼希望通过提供高效便捷的机器学习库而将算法嵌入到边缘设备中。
安装
安装 NNabla 很简单:
pip install nnabla
这是CPU版本的NNabla,GPU-加速器可以通过安装CUDA工具包来添加:
pip install nnabla-ext-cuda
特征
简单,灵活并且有表现力
基于NNabla C++11 内核的 Python API给你提供了灵活性和高产出效率。例如,一个带有分类损失的两层神经网络可以仅通过以下5行代码被定义(超参数由<>括出)。
import nnabla as nnimport nnabla.functions as Fimport 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 iterationfor 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 中提供哦提供了一些其他复杂的案例。