Apache Mxnet 简明教程
Apache MXNet - Python API Module
Apache MXNet 的模块 API 类似于前馈模型,而且可以很容易地组合类似于 Torch 模块。它由以下的类组成:
BaseModule([logger])
它表示模块的基础类。可以将模块视为计算组件或计算机器。模块的任务是执行前向传播和反向传播。它还更新模型中的参数。
Methods
下表显示 BaseModule class 中包含的方法:
Methods |
Definition |
backward([out_grads]) |
如名称所示,此方法实现 backward 计算。 |
bind(data_shapes[, label_shapes, …]) |
它绑定符号以构造执行器,在用模块执行计算之前,此步骤是必要的。 |
fit(train_data[, eval_data, eval_metric, …]) |
此方法训练模块参数。 |
forward(data_batch[, is_train]) |
如名称所示,此方法实现正向传播计算。此方法支持具有各种形状的数据批次,如不同的批次大小或不同的图像大小。 |
forward_backward(data_batch) |
正如名称所示,它是一个便捷的函数,它同时调用前向和反向。 |
get_input_grads([merge_multi_context]) |
此方法将获取在前面的反向计算中计算得到的输入的梯度。 |
get_outputs([merge_multi_context]) |
如名称所示,此方法将获取前面正向计算的输出。 |
get_params() |
它获取参数,尤其是可能复制实际参数用于在设备上执行计算的参数。 |
get_states([merge_multi_context]) |
|
init_optimizer([kvstore, optimizer, …]) |
此方法安装并初始化优化器。它还初始化 kvstore 以进行分布训练。 |
init_params([initializer, arg_params, …]) |
如名称所示,此方法将初始化参数和辅助状态。 |
install_monitor(mon) |
此方法将在所有执行器中安装监控程序。 |
iter_predict(eval_data[, num_batch, reset, …]) |
此方法将遍历预测。 |
load_params(fname) |
正如其名称所示,它将从文件中加载模型参数。 |
predict(eval_data[, num_batch, …]) |
它将运行预测,以及收集输出结果。 |
prepare(data_batch[, sparse_row_id_fn]) |
该算子准备模块以处理给定数据批处理。 |
save_params(fname) |
正如其名称所示,此函数将模型参数保存到文件。 |
score(eval_data, eval_metric[, num_batch, …]) |
它在 eval_data 上运行预测,并且还根据给定的 eval_metric 评估性能。 |
set_params(arg_params, aux_params[, …]) |
此方法为参数和辅助状态值赋值。 |
set_states([states, value]) |
此方法(由名称暗示)为状态设置值。 |
update() |
此方法根据已安装的优化器更新给定参数。它还更新在上一个前向反向批处理中计算的梯度。 |
update_metric(eval_metric, labels[, pre_sliced]) |
此方法(由名称暗示)评估并累积最后一个前向计算的输出的评估度量。 |
backward([out_grads]) |
如名称所示,此方法实现 backward 计算。 |
bind(data_shapes[, label_shapes, …]) |
设置存储桶并绑定默认存储桶键的执行器。此方法表示 BucketingModule 的绑定。 |
forward(data_batch[, is_train]) |
如名称所示,此方法实现正向传播计算。此方法支持具有各种形状的数据批次,如不同的批次大小或不同的图像大小。 |
get_input_grads([merge_multi_context]) |
此方法将获得上一次反向计算中计算的输入梯度。 |
get_outputs([merge_multi_context]) |
正如其名称所示,此方法将从上一次前向计算中获得输出。 |
get_params() |
它获得当前参数,特别是潜在复制在设备上进行计算的实际参数。 |
get_states([merge_multi_context]) |
此方法将从所有设备中获取状态。 |
init_optimizer([kvstore, optimizer, …]) |
此方法安装并初始化优化器。它还初始化 kvstore 以进行分布训练。 |
init_params([initializer, arg_params, …]) |
如名称所示,此方法将初始化参数和辅助状态。 |
install_monitor(mon) |
此方法将在所有执行器中安装监控程序。 |
load(prefix, epoch[, sym_gen, …]) |
此方法将从以前保存的检查点创建模型。 |
load_dict([sym_dict, sym_gen, …]) |
此方法将从将 bucket_key 映射到符号的字典(dict)创建模型。它还共享 arg_params 和 aux_params 。 |
prepare(data_batch[, sparse_row_id_fn]) |
该算子准备模块以处理给定数据批处理。 |
save_checkpoint(prefix, epoch[, remove_amp_cast]) |
此方法(由名称暗示)将当前进度保存到 BucketingModule 中所有存储桶的检查点。建议将 mx.callback.module_checkpoint 用作 epoch_end_callback 以在训练期间保存进度。 |
set_params(arg_params, aux_params[,…]) |
正如其名称所示,此函数将分配参数和辅助状态值。 |
set_states([states, value]) |
此方法(由名称暗示)为状态设置值。 |
switch_bucket(bucket_key, data_shapes[, …]) |
它将切换为不同的存储桶。 |
update() |
此方法根据已安装的优化器更新给定参数。它还更新在上一个前向反向批处理中计算的梯度。 |
update_metric(eval_metric, labels[, pre_sliced]) |
此方法(由名称暗示)评估并累积最后一个前向计算的输出的评估度量。 |
Attributes
以下表列出 BaseModule 类的各个方法包含的属性 −
Attributes |
Definition |
data_names |
其中包含此模块所需数据的名称列表。 |
data_shapes |
其中包含指定此模块的数据输入的 (名称,形状) 对的列表。 |
label_shapes |
其中显示指定此模块的标签输入的 (名称,形状) 对的列表。 |
output_names |
其中包含此模块输出的名称列表。 |
output_shapes |
其中包含指定此模块的输出的 (名称,形状) 对的列表。 |
symbol |
根据所指定的名称,此属性获取与此模块关联的符号。 |
data_shapes:你可以参考 https://mxnet.apache.org 处提供的链接以了解更多详细信息。output_shapes:详细信息
output_shapes:更多信息可在 https://mxnet.apache.org/api/python 找到
BucketingModule(sym_gen[…])
它表示一个模块的 Bucketingmodule 类,它有助于有效地处理长度不一的输入。
Attributes
以下表列出 BaseModule class 的各个方法包含的属性 −
Attributes |
Definition |
data_names |
其中包含此模块所需数据的名称列表。 |
data_shapes |
其中包含指定此模块的数据输入的 (名称,形状) 对的列表。 |
label_shapes |
其中显示指定此模块的标签输入的 (名称,形状) 对的列表。 |
output_names |
其中包含此模块输出的名称列表。 |
output_shapes |
其中包含指定此模块的输出的 (名称,形状) 对的列表。 |
Symbol |
根据所指定的名称,此属性获取与此模块关联的符号。 |
data_shapes − 你可以参考 https://mxnet.apache.org/api/python/docs 处的链接了解更多信息。
output_shapes− 你可以参考 https://mxnet.apache.org/api/python/docs 处的链接了解更多信息。
Module(symbol[,data_names, label_names,…])
它表示一个包装 symbol 的基本模块。
Methods
以下表列出 Module class 中包含的方法 −
Methods |
Definition |
backward([out_grads]) |
如名称所示,此方法实现 backward 计算。 |
bind(data_shapes[, label_shapes, …]) |
它绑定符号以构造执行器,在用模块执行计算之前,此步骤是必要的。 |
borrow_optimizer(shared_module) |
正如名称暗示的那样,此方法会从共享模块中借用优化器。 |
forward(data_batch[, is_train]) |
正如名称暗示的那样,此方法会实现 Forward 计算。此方法支持具有不同形状的数据批次,如不同的批次大小或不同的图像大小。 |
get_input_grads([merge_multi_context]) |
此方法将获取在前面的反向计算中计算得到的输入的梯度。 |
get_outputs([merge_multi_context]) |
如名称所示,此方法将获取前面正向计算的输出。 |
get_params() |
它获取参数,尤其是可能复制实际参数用于在设备上执行计算的参数。 |
get_states([merge_multi_context]) |
此方法将从所有设备获取状态 |
init_optimizer([kvstore, optimizer, …]) |
此方法安装并初始化优化器。它还初始化 kvstore 以进行分布训练。 |
init_params([initializer, arg_params, …]) |
如名称所示,此方法将初始化参数和辅助状态。 |
install_monitor(mon) |
此方法将在所有执行器中安装监控程序。 |
load(prefix, epoch[, sym_gen, …]) |
此方法将从以前保存的检查点创建模型。 |
load_optimizer_states(fname) |
该方法将从文件中加载优化器,即更新器状态。 |
prepare(data_batch[, sparse_row_id_fn]) |
该算子准备模块以处理给定数据批处理。 |
reshape(data_shapes[, label_shapes]) |
顾名思义,此方法根据新的输入形状调整模块的形状。 |
save_checkpoint(prefix, epoch[, …]) |
它将当前进程保存到检查点。 |
save_optimizer_states(fname) |
该方法将优化器或更新器状态保存到文件。 |
set_params(arg_params, aux_params[,…]) |
正如其名称所示,此函数将分配参数和辅助状态值。 |
set_states([states, value]) |
此方法(由名称暗示)为状态设置值。 |
update() |
此方法根据已安装的优化器更新给定参数。它还更新在上一个前向反向批处理中计算的梯度。 |
update_metric(eval_metric, labels[, pre_sliced]) |
此方法(由名称暗示)评估并累积最后一个前向计算的输出的评估度量。 |
Attributes
下表显示了 Module class 方法包含的属性——
Attributes |
Definition |
data_names |
其中包含此模块所需数据的名称列表。 |
data_shapes |
其中包含指定此模块的数据输入的 (名称,形状) 对的列表。 |
label_shapes |
其中显示指定此模块的标签输入的 (名称,形状) 对的列表。 |
output_names |
其中包含此模块输出的名称列表。 |
output_shapes |
其中包含指定此模块的输出的 (名称,形状) 对的列表。 |
label_names |
它包含该模块所需的标签名称列表。 |
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([name,data_names,…])
该类的基础是 mxnet.module.python_module.PythonModule. PythonLossModule 类是一个便捷的模块类,它将所有或许多模块 API 实现为空函数。
Methods
下表显示了 PythonLossModule 类中包含的方法:
Methods |
Definition |
backward([out_grads]) |
如名称所示,此方法实现 backward 计算。 |
forward(data_batch[, is_train]) |
正如名称暗示的那样,此方法会实现 Forward 计算。此方法支持具有不同形状的数据批次,如不同的批次大小或不同的图像大小。 |
get_input_grads([merge_multi_context]) |
此方法将获取在前面的反向计算中计算得到的输入的梯度。 |
get_outputs([merge_multi_context]) |
如名称所示,此方法将获取前面正向计算的输出。 |
install_monitor(mon) |
此方法将在所有执行器中安装监控程序。 |
PythonModule([data_names,label_names…])
该类的基础是 mxnet.module.base_module.BaseModule。PythonModule 类也是一个便捷的模块类,它将所有或许多模块 API 实现为空函数。
Methods
下表显示了 PythonModule 类中包含的方法——
Methods |
Definition |
bind(data_shapes[, label_shapes, …]) |
它绑定符号以构造执行器,在用模块执行计算之前,此步骤是必要的。 |
get_params() |
它获取参数,尤其是可能复制实际参数用于在设备上执行计算的参数。 |
init_optimizer([kvstore, optimizer, …]) |
此方法安装并初始化优化器。它还初始化 kvstore 以进行分布训练。 |
init_params([initializer, arg_params, …]) |
如名称所示,此方法将初始化参数和辅助状态。 |
update() |
此方法根据已安装的优化器更新给定参数。它还更新在上一个前向反向批处理中计算的梯度。 |
update_metric(eval_metric, labels[, pre_sliced]) |
此方法(由名称暗示)评估并累积最后一个前向计算的输出的评估度量。 |
Attributes
下表显示了 PythonModule 类中的方法包含的属性——
Attributes |
Definition |
data_names |
其中包含此模块所需数据的名称列表。 |
data_shapes |
其中包含指定此模块的数据输入的 (名称,形状) 对的列表。 |
label_shapes |
其中显示指定此模块的标签输入的 (名称,形状) 对的列表。 |
output_names |
其中包含此模块输出的名称列表。 |
output_shapes |
其中包含指定此模块的输出的 (名称,形状) 对的列表。 |
data_shapes - 访问链接 https://mxnet.apache.org 查看详细信息。
output_shapes - 访问链接 https://mxnet.apache.org 查看更多详细信息
SequentialModule([logger])
该类的基础是 mxnet.module.base_module.BaseModule。SequentialModule 类也是一个容器模块,它可以链接多个模块。
Methods
下表显示了 SequentialModule 类中包含的方法
Methods |
Definition |
add(module, **kwargs) |
这是该类最重要的函数。它将模块添加到链中。 |
backward([out_grads]) |
顾名思义,此方法实现反向计算。 |
bind(data_shapes[, label_shapes, …]) |
它绑定符号以构造执行器,在用模块执行计算之前,此步骤是必要的。 |
forward(data_batch[, is_train]) |
如名称所示,此方法实现正向传播计算。此方法支持具有各种形状的数据批次,如不同的批次大小或不同的图像大小。 |
get_input_grads([merge_multi_context]) |
此方法将获取在前面的反向计算中计算得到的输入的梯度。 |
get_outputs([merge_multi_context]) |
如名称所示,此方法将获取前面正向计算的输出。 |
get_params() |
它获取参数,尤其是可能复制实际参数用于在设备上执行计算的参数。 |
init_optimizer([kvstore, optimizer, …]) |
此方法安装并初始化优化器。它还初始化 kvstore 以进行分布训练。 |
init_params([initializer, arg_params, …]) |
如名称所示,此方法将初始化参数和辅助状态。 |
install_monitor(mon) |
此方法将在所有执行器中安装监控程序。 |
update() |
此方法根据已安装的优化器更新给定参数。它还更新在上一个前向反向批处理中计算的梯度。 |
update_metric(eval_metric, labels[, pre_sliced]) |
此方法(由名称暗示)评估并累积最后一个前向计算的输出的评估度量。 |
Attributes
下表显示了 BaseModule 类的方法中包含的属性 -
Attributes |
Definition |
data_names |
其中包含此模块所需数据的名称列表。 |
data_shapes |
其中包含指定此模块的数据输入的 (名称,形状) 对的列表。 |
label_shapes |
其中显示指定此模块的标签输入的 (名称,形状) 对的列表。 |
output_names |
其中包含此模块输出的名称列表。 |
output_shapes |
其中包含指定此模块的输出的 (名称,形状) 对的列表。 |
output_shapes |
其中包含指定此模块的输出的 (名称,形状) 对的列表。 |
data_shapes - 此处给出的链接 https://mxnet.apache.org 将帮助你更详细地理解属性。
output_shapes - 按照 https://mxnet.apache.org/api 上的链接了解更多详情。
Implementation Examples
在下面的示例中,我们将创建一个 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)
Output
输出如下:
<Symbol softmax>
Example
print(mod)
Output
输出如下所示−
<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())
Output
执行以上代码时,应该看到以下输出 −
[[2. 2. 2. 2. 2. 2. 2. 2. 2. 2.]]
Example
data2 = [mx.nd.ones((3, 5))]
mod.forward(Batch(data2))
print (mod.get_outputs()[0].asnumpy())
Output
以下是代码的输出 −
[[2. 2. 2. 2. 2.]
[2. 2. 2. 2. 2.]
[2. 2. 2. 2. 2.]]