Mxnet Module API

Module API, 定义在module包里面, 提供了一个中间和高-level的接口, 对于用符号运算。

可以把module想像成为一个能够执行由symbol来定义的一个程序。


比如 mod = mx.mod.Module(out), 这个out是前面的symbol计算的最终,可以理解为神经网络出来的结果。

神经网络到此基本上完成'计算图'的构建, 后面要给数据,初始化。。。。

在此基础上可以进行以下操作

mod.bind()    

mod.init_params()

然后开始执行计算时有两种

一种是中间的

mod.forward()

mod.backward()

mod.update()


另外一种是高-level的接口

mod.fit(nd_iter, num_poch=10,....)

预测话就

mod.predict(new_nd_iter)  # 在新的数据上预测。


BaseModule class:

这个是重点。BaseModule class 是其他module class的base class.

一个module有几个states:

1. initial state 

此时内存还没有被分配, 所以这时候module还没有准备好计算

2. binded

输入,输出,参数的shapes都已经知道, 内存也分配好了,这时候module准备好了计算

3.parameters are initialized

对于一个有参数的modules,如果在计算之前没有初始化参数的话,可能会导致没有定义的输出

4. optimizer are installed

优化器可以安装到module, 这样的话,module中的参数可以根据这个优化器来进行更新参数,前提是当梯度计算完成后。


为了一个module和其他的进行interact, 它得能够在ininital state 阶段report下面的信息:

data_names:这是一个string类型的列表, 是用来表明需要的数据的名字

output_names:这也是一个string类型的列表, 来表明需要输出的结果的名字。


在binding之后, module应该能够report 下面的信息:

1.state information:

它包括 binded: bool (是否内存被分配)

           for_training: (是否这个module 是用来training)

        params_initialized : bool(是否module's 参数已经被初始化)

          optimizer_initialized: bool(是否优化器被定义和初始化)

            inputs_need_grad: bool (关于input data的数据是否需要。)


input/output information:

它包括: data_shapes :   [(name, shape)]

             label_shapes: [(name, shape)]

             output_shapes:  [(name, shape)]


parameters:

它包括: get_params(): 返回的是  (arg_params, aux_params)其中每一个都是一个字典,这个字典的key 是 name, value是ndarray类型的

                set_params(arg_params, aux_params): 指定做计算所用的参数

                  init_params(...) : 一个更灵活的接口用来指定和初始参数。

setup:

这里面包括:

bind(): 准备计算环境

init_optimizer(): 安装优化器准备参数更新

prepare(): 根据当前的data batch 准备module


computation:

forward(data_batch)

backward()

update() : 根据 优化器来更新参数

get_outputs()  : 获得前向计算的输出

get_input_grads(): 获得之前在后向计算时关于inputdata的梯度

update_metric(metric, labels): 根据之前前向计算的结果,更新performance metric


一些常用函数

  • forward_backward(data_batch)  : 可用来同时calls forward和backward
  • score(eval_data, eval_metric, num_batch, .....)

意思是在eval_data上根据选择的模型评价 eval_metric来评价这个performance

比如

metric = mx.metric.Accuracy()

mod.score(val_dtaiter, metric)

也可以

mod.score(val_dataiter, ['mse', 'acc'])

  • iter_predict(eval_data, num_batch=None, .....)    

比如

for pred, i_batch, batch in module.iter_predict(eval_data):

  • predict(eval_data, num_batch=None,merge_batches=True)

这个返回的是预测结果。如果想转化为numpy的话,可以.asnumpy()

比如mod.predict(eval_data= val_dataiter, num_batch=10)


  • fit(train_data, eval_data=None, eval_metric='acc',....., optimizer='sgd', optimizer_params=(('learning_rage', 0.01)))


            



Initialize memory

BaseModule.bind(data_shapes, label_shapes=None, for_traing=True, inputs_need_grad=False, ....)

主要作用是bind symbols to construct executors.

这一步是非常有必要的在用module来计算之前。

比如可以这样

mod.bind(data_shapes=[('data', (1, 10, 10))])

或者当训练数据已经在的时候,

mod.bind(data_shapes=train_iter.provide_data, label_shapes=train_iter.provide_label)


init_optimizer :install and initializers 优化器

常用的参数是

mod.init_optimizer(optimizer='sgd', optimizer_params=(('learning_rate', 0.005), ))

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值