MXNET教程2:Module API
首先我给出一个实例来引入module模块。
训练一个神经网络包含以下几个步骤:1)输入训练数据;2)初始化神经网络的模型参数;3)前向传播、通过梯度更新参数来执行后向传播;4)执行模型检测(model checkpoints)等等。训练好神经网络之后,预测推理过程的步骤包括以上的大部分,除了不需要执行后向传播。 Mxnet框架将神经网络训练和推理的常用步骤模块化,打包在Module package,并给出相应的接口API方便大家调用。Module提供了执行预定义网络的高级(high-level )接口和中级(intermediate-level)接口。两种接口可以互换使用。
用Mxnet的Module写一个多层感知机MLP来识别26个英文字母(Letter Recognition)。这种任务的整体流程是:
整体流程代码:
、输出:
使用中级接口,方便调试和改动:
例子结束,下来来说明mxnet的module(简称mod)API。module是mxnet的“计算部件”,主要功能是接受Symbol定义好的网络计算图(symbol是创建mod时的一个参数),进而执行神经网络的前向传播运算、后向传播运算、更新参数,推理等计算。一个module有以下几个状态。
1、初始状态(Initial state:):内存尚未分配,因此模块尚未准备好进行计算。
2.bind:输入、输出和参数的形状已知,内存已分配,模块已准备好进行计算。
3、参数初始化(init_parameters):对于带参数的模块,在初始化参数之前进行计算可能会导致未定义的输出。
4、安装优化器(Optimizer):优化器可以安装到模块上。之后,可以在计算梯度(向前向后)之后,根据优化器更新模块的参数。
module模块在bind之前,初始化是必须指明的信息包含:
1、data_names: list of type string indicating the names of the required input data.
2、output_names: list of type string indicating the names of the required outputs.
参考:
http://mxnet.incubator.apache.org/versions/master/api/python/module/module.html