Apache MXNet - Python API 模块


Apache MXNet 的模块 API 类似于前馈模型,并且与 Torch 模块类似,更容易编写。它由以下类组成 -

基本模块([记录器])

它代表模块的基类。模块可以被认为是计算组件或计算机器。模块的工作是执行前向和后向传递。它还更新模型中的参数。

方法

下表显示了BaseModule 类中包含的方法-

此方法将从所有设备获取状态
方法 定义
向后([out_grads]) 顾名思义,该方法实现了向后计算。
绑定(数据形状[,标签形状,...]) 它绑定符号来构造执行器,并且在使用模块执行计算之前这是必需的。
适合(train_data [,eval_data,eval_metric,...]) 该方法训练模块参数。
向前(data_batch [,is_train]) 顾名思义,该方法实现了前向计算。该方法支持具有各种形状的数据批次,例如不同的批次大小或不同的图像大小。
向前_向后(数据_批) 顾名思义,这是一个方便的函数,可以调用向前和向后调用。
get_input_grads([merge_multi_context]) 此方法将获取在先前的向后计算中计算出的输入的梯度。
get_outputs([merge_multi_context]) 顾名思义,该方法将获取先前前向计算的输出。
获取参数() 它获取参数,尤其是那些可能是用于在设备上进行计算的实际参数的副本的参数。
get_states([merge_multi_context])
init_optimizer([kvstore, 优化器, …]) 此方法安装并初始化优化器。它还初始化kvstore以进行分布式训练。
init_params([初始化器, arg_params, …]) 顾名思义,该方法将初始化参数和辅助状态。
安装监视器(周一) 此方法将在所有执行器上安装监视器。
iter_predict(eval_data[, num_batch, 重置, …]) 该方法将迭代预测。
加载参数(fname) 正如名称所指定的,它将从文件加载模型参数。
预测(eval_data[,num_batch,...]) 它将运行预测并收集输出。
准备(data_batch[,sparse_row_id_fn]) 操作员准备模块来处理给定的数据批次。
保存参数(fname) 正如名称所指定的,该函数将模型参数保存到文件中。
分数(eval_data, eval_metric[, num_batch, …]) 它对eval_data运行预测,并根据给定的eval_metric评估性能。
set_params(arg_params, aux_params[, …]) 此方法将分配参数和辅助状态值。
set_states([状态, 值]) 顾名思义,此方法为状态设置值。
更新() 该方法根据安装的优化器更新给定的参数。它还更新在前一个前向-后向批次中计算的梯度。
update_metric(eval_metric,标签[,pre_sliced]) 顾名思义,该方法对最后一次前向计算的输出进行评估并累积评估指标。
向后([out_grads]) 顾名思义,该方法实现了向后计算。
绑定(数据形状[,标签形状,...]) 它设置存储桶并绑定默认存储桶键的执行器。此方法表示BucketingModule的绑定。
向前(data_batch [,is_train]) 顾名思义,该方法实现了前向计算。该方法支持具有各种形状的数据批次,例如不同的批次大小或不同的图像大小。
get_input_grads([merge_multi_context]) 该方法将获得在先前的向后计算中计算出的输入的梯度。
get_outputs([merge_multi_context]) 顾名思义,该方法将从之前的前向计算中获取输出。
获取参数() 它获取当前参数,尤其是那些可能是用于在设备上进行计算的实际参数的副本的参数。
get_states([merge_multi_context]) 此方法将从所有设备获取状态。
init_optimizer([kvstore, 优化器, …]) 此方法安装并初始化优化器。它还初始化kvstore以进行分布式训练。
init_params([初始化器, arg_params, …]) 顾名思义,该方法将初始化参数和辅助状态。
安装监视器(周一) 此方法将在所有执行器上安装监视器。
加载(前缀,纪元[,sym_gen,...]) 此方法将从之前保存的检查点创建模型。
load_dict([sym_dict, sym_gen, …]) 此方法将从字典(dict)创建一个模型,将bucket_key映射到符号。它还共享arg_paramsaux_params
准备(data_batch[,sparse_row_id_fn]) 操作员准备模块来处理给定的数据批次。
save_checkpoint(前缀,纪元[,remove_amp_cast]) 这个方法,顾名思义,就是将BucketingModule中所有桶的当前进度保存到检查点。建议使用 mx.callback.module_checkpoint 作为 epoch_end_callback 在训练时保存。
set_params(arg_params, aux_params[,…]) 正如名称所指定的,该函数将分配参数和辅助状态值。
set_states([状态, 值]) 顾名思义,此方法为状态设置值。
switch_bucket(bucket_key, data_shapes[, …]) 它将切换到不同的存储桶。
更新() 该方法根据安装的优化器更新给定的参数。它还更新在前一个前向-后向批次中计算的梯度。
update_metric(eval_metric,标签[,pre_sliced]) 顾名思义,该方法对最后一次前向计算的输出进行评估并累积评估指标。

属性

下表显示了BaseModule类的方法中包含的属性-

属性 定义
数据名称 它由该模块所需数据的名称列表组成。
数据形状 它由指定该模块的数据输入的(名称、形状)对列表组成。
标签形状 它显示了(名称,形状)对的列表,指定了该模块的标签输入。
输出名称 它由该模块的输出名称列表组成。
输出形状 它由指定该模块输出的(名称、形状)对列表组成。
象征 正如名称所指定的,该属性获取与该模块关联的符号。

data_shapes:您可以参考https://mxnet.apache.org上提供的链接了解详细信息。输出形状:更多

output_shapes:更多信息请访问https://mxnet.apache.org/api/python

BucketingModule(sym_gen[…])

它代表模块的Bucketingmodule类,有助于有效地处理不同长度的输入。

方法

下表显示了BucketingModule 类中包含的方法-

属性

下表显示了BaseModule 类的方法中包含的属性-

属性 定义
数据名称 它由该模块所需数据的名称列表组成。
数据形状 它由指定该模块的数据输入的(名称、形状)对列表组成。
标签形状 它显示了(名称,形状)对的列表,指定了该模块的标签输入。
输出名称 它由该模块的输出名称列表组成。
输出形状 它由指定该模块输出的(名称、形状)对列表组成。
象征 正如名称所指定的,该属性获取与该模块关联的符号。

data_shapes - 您可以参考https://mxnet.apache.org/api/python/docs上的链接以获取更多信息。

output_shapes− 您可以参考https://mxnet.apache.org/api/python/docs上的链接以获取更多信息。

模块(符号[,数据名称,标签名称,...])

它代表一个包装符号的基本模块。

方法

下表显示了Module 类中包含的方法-

方法 定义
向后([out_grads]) 顾名思义,该方法实现了向后计算。
绑定(数据形状[,标签形状,...]) 它绑定符号来构造执行器,并且在使用模块执行计算之前这是必需的。
借用优化器(共享模块) 顾名思义,该方法将从共享模块借用优化器。
向前(data_batch [,is_train]) 顾名思义,该方法实现了前向计算。该方法支持具有各种形状的数据批次,例如不同的批次大小或不同的图像大小。
get_input_grads([merge_multi_context]) 此方法将获取在先前的向后计算中计算出的输入的梯度。
get_outputs([merge_multi_context]) 顾名思义,该方法将获取先前前向计算的输出。
获取参数() 它获取参数,尤其是那些可能是用于在设备上进行计算的实际参数的副本的参数。
get_states([merge_multi_context]) 此方法将从所有设备获取状态
init_optimizer([kvstore, 优化器, …]) 此方法安装并初始化优化器。它还初始化kvstore以进行分布式训练。
init_params([初始化器, arg_params, …]) 顾名思义,该方法将初始化参数和辅助状态。
安装监视器(周一) 此方法将在所有执行器上安装监视器。
加载(前缀,纪元[,sym_gen,...]) 此方法将从之前保存的检查点创建模型。
load_optimizer_states(fname) 此方法将从文件加载优化器,即更新器状态。
准备(data_batch[,sparse_row_id_fn]) 操作员准备模块来处理给定的数据批次。
重塑(数据形状[,标签形状]) 顾名思义,此方法会针对新的输入形状重塑模块。
save_checkpoint(前缀, 纪元[, …]) 它将当前进度保存到检查点。
保存优化器状态(fname) 此方法将优化器或更新器状态保存到文件中。
set_params(arg_params, aux_params[,…]) 正如名称所指定的,该函数将分配参数和辅助状态值。
set_states([状态, 值]) 顾名思义,此方法为状态设置值。
更新() 该方法根据安装的优化器更新给定的参数。它还更新在前一个前向-后向批次中计算的梯度。
update_metric(eval_metric,标签[,pre_sliced]) 顾名思义,该方法对最后一次前向计算的输出进行评估并累积评估指标。

属性

下表显示了Module 类方法中包含的属性-

属性 定义
数据名称 它由该模块所需数据的名称列表组成。
数据形状 它由指定该模块的数据输入的(名称、形状)对列表组成。
标签形状 它显示了(名称,形状)对的列表,指定了该模块的标签输入。
输出名称 它由该模块的输出名称列表组成。
输出形状 它由指定该模块输出的(名称、形状)对列表组成。
标签名称 它由该模块所需的标签名称列表组成。

data_shapes:访问链接https://mxnet.apache.org/api/python/docs/api/module了解更多详细信息。

output_shapes:此处给出的链接https://mxnet.apache.org/api/python/docs/api/module/index.html将提供其他重要信息。

PythonLossModule([名称,data_names,…])

此类的基础是mxnet.module.python_module.PythonModule。PythonLossModule 类是一个方便的模块类,它将所有或许多模块 API 实现为空函数。

方法

下表显示了PythonLossModule类中包含的方法:

方法 定义
向后([out_grads]) 顾名思义,该方法实现了向后计算。
向前(data_batch [,is_train]) 顾名思义,该方法实现了前向计算。该方法支持具有各种形状的数据批次,例如不同的批次大小或不同的图像大小。
get_input_grads([merge_multi_context]) 此方法将获取在先前的向后计算中计算出的输入的梯度。
get_outputs([merge_multi_context]) 顾名思义,该方法将获取先前前向计算的输出。
安装监视器(周一) 此方法将在所有执行器上安装监视器。

PythonModule([数据名称,标签名称...])

该类的基础是 mxnet.module.base_module.BaseModule。PythonModule 类也是一个方便的模块类,它将所有或许多模块 API 实现为空函数。

方法

下表显示了PythonModule类中包含的方法-

方法 定义
绑定(数据形状[,标签形状,...]) 它绑定符号来构造执行器,并且在使用模块执行计算之前这是必需的。
获取参数() 它获取参数,尤其是那些可能是用于在设备上进行计算的实际参数的副本的参数。
init_optimizer([kvstore, 优化器, …]) 此方法安装并初始化优化器。它还初始化kvstore以进行分布式训练。
init_params([初始化器, arg_params, …]) 顾名思义,该方法将初始化参数和辅助状态。
更新() 该方法根据安装的优化器更新给定的参数。它还更新在前一个前向-后向批次中计算的梯度。
update_metric(eval_metric,标签[,pre_sliced]) 顾名思义,该方法对最后一次前向计算的输出进行评估并累积评估指标。

属性

下表显示了PythonModule类的方法中包含的属性-

属性 定义
数据名称 它由该模块所需数据的名称列表组成。
数据形状 它由指定该模块的数据输入的(名称、形状)对列表组成。
标签形状 它显示了(名称,形状)对的列表,指定了该模块的标签输入。
输出名称 它由该模块的输出名称列表组成。
输出形状 它由指定该模块输出的(名称、形状)对列表组成。

data_shapes - 请点击链接https://mxnet.apache.org了解详细信息。

output_shapes - 有关更多详细信息,请访问https://mxnet.apache.org上提供的链接

顺序模块([记录器])

该类的基础是 mxnet.module.base_module.BaseModule。SequentialModule 类也是一个容器模块,可以将两个以上(多个)模块链接在一起。

方法

下表显示了SequentialModule类中包含的方法

方法 定义
添加(模块,**kwargs) 这是这个类最重要的功能。它将一个模块添加到链中。
向后([out_grads]) 顾名思义,该方法实现了向后计算。
绑定(数据形状[,标签形状,...]) 它绑定符号来构造执行器,并且在使用模块执行计算之前这是必需的。
向前(data_batch [,is_train]) 顾名思义,该方法实现了前向计算。该方法支持具有各种形状的数据批次,例如不同的批次大小或不同的图像大小。
get_input_grads([merge_multi_context]) 此方法将获取在先前的向后计算中计算出的输入的梯度。
get_outputs([merge_multi_context]) 顾名思义,该方法将获取先前前向计算的输出。
获取参数() 它获取参数,尤其是那些可能是用于在设备上进行计算的实际参数的副本的参数。
init_optimizer([kvstore, 优化器, …]) 此方法安装并初始化优化器。它还初始化kvstore以进行分布式训练。
init_params([初始化器, arg_params, …]) 顾名思义,该方法将初始化参数和辅助状态。
安装监视器(周一) 此方法将在所有执行器上安装监视器。
更新() 该方法根据安装的优化器更新给定的参数。它还更新在前一个前向-后向批次中计算的梯度。
update_metric(eval_metric,标签[,pre_sliced]) 顾名思义,该方法对最后一次前向计算的输出进行评估并累积评估指标。

属性

下表显示了 BaseModule 类的方法中包含的属性 -

属性 定义
数据名称 它由该模块所需数据的名称列表组成。
数据形状 它由指定该模块的数据输入的(名称、形状)对列表组成。
标签形状 它显示了(名称,形状)对的列表,指定了该模块的标签输入。
输出名称 它由该模块的输出名称列表组成。
输出形状 它由指定该模块输出的(名称、形状)对列表组成。
输出形状 它由指定该模块输出的(名称、形状)对列表组成。

data_shapes - 此处给出的链接https://mxnet.apache.org将帮助您详细了解该属性。

output_shapes - 请点击https://mxnet.apache.org/api上的链接了解详细信息。

实施示例

在下面的示例中,我们将创建一个mxnet模块。

import mxnet as mx
input_data = mx.symbol.Variable('input_data')
f_connected1 = mx.symbol.FullyConnected(data, name='f_connected1', num_hidden=128)
activation_1 = mx.symbol.Activation(f_connected1, name='relu1', act_type="relu")
f_connected2 = mx.symbol.FullyConnected(activation_1, name = 'f_connected2', num_hidden = 64)
activation_2 = mx.symbol.Activation(f_connected2, name='relu2',
act_type="relu")
f_connected3 = mx.symbol.FullyConnected(activation_2, name='fc3', num_hidden=10)
out = mx.symbol.SoftmaxOutput(f_connected3, name = 'softmax')
mod = mx.mod.Module(out)
print(out)

输出

输出如下 -

<Symbol softmax>

例子

print(mod)

输出

输出如下所示 -

<mxnet.module.module.Module object at 0x00000123A9892F28>

在下面的示例中,我们将实现前向计算

import mxnet as mx
from collections import namedtuple
Batch = namedtuple('Batch', ['data'])
data = mx.sym.Variable('data')
out = data * 2
mod = mx.mod.Module(symbol=out, label_names=None)
mod.bind(data_shapes=[('data', (1, 10))])
mod.init_params()
data1 = [mx.nd.ones((1, 10))]
mod.forward(Batch(data1))
print (mod.get_outputs()[0].asnumpy())

输出

当您执行上述代码时,您应该看到以下输出 -

[[2. 2. 2. 2. 2. 2. 2. 2. 2. 2.]]

例子

data2 = [mx.nd.ones((3, 5))]

mod.forward(Batch(data2))
print (mod.get_outputs()[0].asnumpy())

输出

下面给出的是代码的输出 -

[[2. 2. 2. 2. 2.]
[2. 2. 2. 2. 2.]
[2. 2. 2. 2. 2.]]