Apache MXNet - Python API 模組



Apache MXNet 的模組 API 類似於一個前饋模型,並且更容易組合,類似於 Torch 模組。它包含以下類:

BaseModule([logger])

它表示模組的基類。模組可以被認為是計算元件或計算機器。模組的任務是執行前向和反向傳遞。它還會更新模型中的引數。

方法

下表顯示了BaseModule 類中包含的方法:

此方法將從所有裝置獲取狀態
方法 定義
backward([out_grads]) 顧名思義,此方法實現了反向計算。
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]) 顧名思義,此方法實現了反向計算。
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, …]) 此方法將從一個字典 (dict) 建立模型,該字典將bucket_key對映到符號。它還共享arg_paramsaux_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]) 此方法(顧名思義)評估並在最後一次前向計算的輸出上累積評估指標。

屬性

下表顯示了BaseModule類方法中包含的屬性:

屬性 定義
data_names 它包含此模組所需資料的名稱列表。
data_shapes 它包含指定此模組的資料輸入的 (name, shape) 對列表。
label_shapes 它顯示指定此模組的標籤輸入的 (name, shape) 對列表。
output_names 它包含此模組輸出的名稱列表。
output_shapes 它包含指定此模組輸出的 (name, shape) 對列表。
symbol 如名稱指定,此屬性獲取與此模組關聯的符號。

data_shapes:您可以參考https://mxnet.apache.org上的連結以獲取詳細資訊。output_shapes:更多

output_shapes:更多資訊可在https://mxnet.apache.org/api/python找到

BucketingModule(sym_gen[…])

它表示模組的Bucketingmodule類,該類有助於有效地處理長度不同的輸入。

方法

下表顯示了BucketingModule 類中包含的方法:

屬性

下表顯示了BaseModule 類方法中包含的屬性:

屬性 定義
data_names 它包含此模組所需資料的名稱列表。
data_shapes 它包含指定此模組的資料輸入的 (name, shape) 對列表。
label_shapes 它顯示指定此模組的標籤輸入的 (name, shape) 對列表。
output_names 它包含此模組輸出的名稱列表。
output_shapes 它包含指定此模組輸出的 (name, shape) 對列表。
符號 如名稱指定,此屬性獲取與此模組關聯的符號。

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的基本模組。

方法

下表顯示了Module 類中包含的方法:

方法 定義
backward([out_grads]) 顧名思義,此方法實現了反向計算。
bind(data_shapes[, label_shapes, …]) 它繫結符號以構建執行器,這在執行模組計算之前是必要的。
borrow_optimizer(shared_module) 顧名思義,此方法將從共享模組借用最佳化器。
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_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]) 此方法(顧名思義)評估並在最後一次前向計算的輸出上累積評估指標。

屬性

下表顯示了Module 類方法中包含的屬性:

屬性 定義
data_names 它包含此模組所需資料的名稱列表。
data_shapes 它包含指定此模組的資料輸入的 (name, shape) 對列表。
label_shapes 它顯示指定此模組的標籤輸入的 (name, shape) 對列表。
output_names 它包含此模組輸出的名稱列表。
output_shapes 它包含指定此模組輸出的 (name, shape) 對列表。
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 作為空函式實現。

方法

下表顯示了PythonLossModule類中包含的方法

方法 定義
backward([out_grads]) 顧名思義,此方法實現了反向計算。
forward(data_batch[, is_train]) 顧名思義,此方法實現了前向計算。此方法支援具有各種形狀的資料批次,例如不同的批次大小或不同的影像大小。
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 作為空函式實現。

方法

下表顯示了PythonModule類中包含的方法:

方法 定義
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]) 此方法(顧名思義)評估並在最後一次前向計算的輸出上累積評估指標。

屬性

下表顯示了PythonModule類方法中包含的屬性:

屬性 定義
data_names 它包含此模組所需資料的名稱列表。
data_shapes 它包含指定此模組的資料輸入的 (name, shape) 對列表。
label_shapes 它顯示指定此模組的標籤輸入的 (name, shape) 對列表。
output_names 它包含此模組輸出的名稱列表。
output_shapes 它包含指定此模組輸出的 (name, shape) 對列表。

data_shapes - 請訪問https://mxnet.apache.org以獲取詳細資訊。

output_shapes - 有關更多詳細資訊,請訪問https://mxnet.apache.org上提供的連結

SequentialModule([logger])

此類的基類是mxnet.module.base_module.BaseModule。SequentialModule 類也是一個容器模組,可以將兩個以上(多個)模組連結在一起。

方法

下表顯示了SequentialModule類中包含的方法

方法 定義
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]) 此方法(顧名思義)評估並在最後一次前向計算的輸出上累積評估指標。

屬性

下表顯示了BaseModule類方法中包含的屬性:

屬性 定義
data_names 它包含此模組所需資料的名稱列表。
data_shapes 它包含指定此模組的資料輸入的 (name, shape) 對列表。
label_shapes 它顯示指定此模組的標籤輸入的 (name, shape) 對列表。
output_names 它包含此模組輸出的名稱列表。
output_shapes 它包含指定此模組輸出的 (name, shape) 對列表。
output_shapes 它包含指定此模組輸出的 (name, shape) 對列表。

data_shapes - 此處提供的連結https://mxnet.apache.org將幫助您更詳細地瞭解該屬性。

輸出形狀 - 有關詳細資訊,請訪問 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.]]
廣告