- Apache MXNet 教程
- Apache MXNet - 首頁
- Apache MXNet - 簡介
- Apache MXNet - 安裝 MXNet
- Apache MXNet - 工具包和生態系統
- Apache MXNet - 系統架構
- Apache MXNet - 系統元件
- Apache MXNet - 統一運算元 API
- Apache MXNet - 分散式訓練
- Apache MXNet - Python 包
- Apache MXNet - NDArray
- Apache MXNet - Gluon
- Apache MXNet - KVStore 和視覺化
- Apache MXNet - Python API ndarray
- Apache MXNet - Python API Gluon
- Apache MXNet - Python API autograd 和初始化器
- Apache MXNet - Python API Symbol
- Apache MXNet - Python API Module
- Apache MXNet 有用資源
- Apache MXNet - 快速指南
- Apache MXNet - 有用資源
- Apache MXNet - 討論
Apache MXNet - Python API Gluon
正如我們在前面的章節中討論的那樣,MXNet Gluon 為深度學習專案提供了一個清晰、簡潔和簡單的 API。它使 Apache MXNet 能夠在不犧牲訓練速度的情況下快速原型設計、構建和訓練深度學習模型。
核心模組
讓我們學習 Apache MXNet Python 應用程式設計介面 (API) Gluon 的核心模組。
gluon.nn
Gluon 在 gluon.nn 模組中提供了大量的內建神經網路層。這就是它被稱為核心模組的原因。
方法及其引數
以下是mxnet.gluon.nn核心模組涵蓋的一些重要方法及其引數:
| 方法及其引數 | 定義 |
|---|---|
| Activation(activation, **kwargs) | 顧名思義,此方法將啟用函式應用於輸入。 |
| AvgPool1D([pool_size, strides, padding, …]) | 這是針對時間序列資料的平均池化操作。 |
| AvgPool2D([pool_size, strides, padding, …]) | 這是針對空間資料的平均池化操作。 |
| AvgPool3D([pool_size, strides, padding, …]) | 這是針對 3D 資料的平均池化操作。資料可以是空間的或時空的。 |
| BatchNorm([axis, momentum, epsilon, center, …]) | 它表示批次歸一化層。 |
| BatchNormReLU([axis, momentum, epsilon, …]) | 它也表示批次歸一化層,但具有 ReLU 啟用函式。 |
| Block([prefix, params]) | 它提供了所有神經網路層和模型的基類。 |
| Conv1D(channels, kernel_size[, strides, …]) | 此方法用於一維卷積層。例如,時間卷積。 |
| Conv1DTranspose(channels, kernel_size[, …]) | 此方法用於轉置一維卷積層。 |
| Conv2D(channels, kernel_size[, strides, …]) | 此方法用於二維卷積層。例如,影像上的空間卷積。 |
| Conv2DTranspose(channels, kernel_size[, …]) | 此方法用於轉置二維卷積層。 |
| Conv3D(channels, kernel_size[, strides, …]) | 此方法用於三維卷積層。例如,體積上的空間卷積。 |
| Conv3DTranspose(channels, kernel_size[, …]) | 此方法用於轉置三維卷積層。 |
| Dense(units[, activation, use_bias, …]) | 此方法表示常規的全連線神經網路層。 |
| Dropout(rate[, axes]) | 顧名思義,此方法將 Dropout 應用於輸入。 |
| ELU([alpha]) | 此方法用於指數線性單元 (ELU)。 |
| Embedding(input_dim, output_dim[, dtype, …]) | 它將非負整數轉換為固定大小的密集向量。 |
| Flatten(**kwargs) | 此方法將輸入展平為二維。 |
| GELU(**kwargs) | 此方法用於高斯指數線性單元 (GELU)。 |
| GlobalAvgPool1D([layout]) | 藉助此方法,我們可以對時間序列資料進行全域性平均池化操作。 |
| GlobalAvgPool2D([layout]) | 藉助此方法,我們可以對空間資料進行全域性平均池化操作。 |
| GlobalAvgPool3D([layout]) | 藉助此方法,我們可以對 3D 資料進行全域性平均池化操作。 |
| GlobalMaxPool1D([layout]) | 藉助此方法,我們可以對一維資料進行全域性最大池化操作。 |
| GlobalMaxPool2D([layout]) | 藉助此方法,我們可以對二維資料進行全域性最大池化操作。 |
| GlobalMaxPool3D([layout]) | 藉助此方法,我們可以對三維資料進行全域性最大池化操作。 |
| GroupNorm([num_groups, epsilon, center, …]) | 此方法將組歸一化應用於 n 維輸入陣列。 |
| HybridBlock([prefix, params]) | 此方法支援使用Symbol和NDArray進行前向傳播。 |
| HybridLambda(function[, prefix]) | 藉助此方法,我們可以將運算子或表示式包裝為 HybridBlock 物件。 |
| HybridSequential([prefix, params]) | 它按順序堆疊 HybridBlock。 |
| InstanceNorm([axis, epsilon, center, scale, …]) | 此方法將例項歸一化應用於 n 維輸入陣列。 |
實現示例
在下面的示例中,我們將使用 Block(),它提供了所有神經網路層和模型的基類。
from mxnet.gluon import Block, nn
class Model(Block):
def __init__(self, **kwargs):
super(Model, self).__init__(**kwargs)
# use name_scope to give child Blocks appropriate names.
with self.name_scope():
self.dense0 = nn.Dense(20)
self.dense1 = nn.Dense(20)
def forward(self, x):
x = mx.nd.relu(self.dense0(x))
return mx.nd.relu(self.dense1(x))
model = Model()
model.initialize(ctx=mx.cpu(0))
model(mx.nd.zeros((5, 5), ctx=mx.cpu(0)))
輸出
您將看到以下輸出:
[[0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.] [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.] [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.] [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.] [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]] <NDArray 5x20 @cpu(0)*gt;
在下面的示例中,我們將使用 HybridBlock(),它支援使用 Symbol 和 NDArray 進行前向傳播。
import mxnet as mx
from mxnet.gluon import HybridBlock, nn
class Model(HybridBlock):
def __init__(self, **kwargs):
super(Model, self).__init__(**kwargs)
# use name_scope to give child Blocks appropriate names.
with self.name_scope():
self.dense0 = nn.Dense(20)
self.dense1 = nn.Dense(20)
def forward(self, x):
x = nd.relu(self.dense0(x))
return nd.relu(self.dense1(x))
model = Model()
model.initialize(ctx=mx.cpu(0))
model.hybridize()
model(mx.nd.zeros((5, 5), ctx=mx.cpu(0)))
輸出
輸出如下:
[[0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.] [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.] [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.] [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.] [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]] <NDArray 5x20 @cpu(0)>
gluon.rnn
Gluon 在 gluon.rnn 模組中提供了大量的內建迴圈神經網路 (RNN) 層。這就是它被稱為核心模組的原因。
方法及其引數
以下是mxnet.gluon.nn核心模組涵蓋的一些重要方法及其引數:
| 方法及其引數 | 定義 |
|---|---|
| BidirectionalCell(l_cell, r_cell[, …]) | 它用於雙向迴圈神經網路 (RNN) 單元。 |
| DropoutCell(rate[, axes, prefix, params]) | 此方法將對給定的輸入應用 dropout。 |
| GRU(hidden_size[, num_layers, layout, …]) | 它將多層門控迴圈單元 (GRU) RNN 應用於給定的輸入序列。 |
| GRUCell(hidden_size[, …]) | 它用於門控整流單元 (GRU) 網路單元。 |
| HybridRecurrentCell([prefix, params]) | 此方法支援混合。 |
| HybridSequentialRNNCell([prefix, params]) | 藉助此方法,我們可以順序堆疊多個 HybridRNN 單元。 |
| LSTM(hidden_size[, num_layers, layout, …])0 | 它將多層長短期記憶 (LSTM) RNN 應用於給定的輸入序列。 |
| LSTMCell(hidden_size[, …]) | 它用於長短期記憶 (LSTM) 網路單元。 |
| ModifierCell(base_cell) | 它是修飾符單元的基類。 |
| RNN(hidden_size[, num_layers, activation, …]) | 它將具有tanh或ReLU非線性的多層 Elman RNN 應用於給定的輸入序列。 |
| RNNCell(hidden_size[, activation, …]) | 它用於 Elman RNN 迴圈神經網路單元。 |
| RecurrentCell([prefix, params]) | 它表示 RNN 單元的抽象基類。 |
| SequentialRNNCell([prefix, params]) | 藉助此方法,我們可以順序堆疊多個 RNN 單元。 |
| ZoneoutCell(base_cell[, zoneout_outputs, …]) | 此方法在基單元上應用 Zoneout。 |
實現示例
在下面的示例中,我們將使用 GRU(),它將多層門控迴圈單元 (GRU) RNN 應用於給定的輸入序列。
layer = mx.gluon.rnn.GRU(100, 3) layer.initialize() input_seq = mx.nd.random.uniform(shape=(5, 3, 10)) out_seq = layer(input_seq) h0 = mx.nd.random.uniform(shape=(3, 3, 100)) out_seq, hn = layer(input_seq, h0) out_seq
輸出
這將產生以下輸出:
[[[ 1.50152072e-01 5.19012511e-01 1.02390535e-01 ... 4.35803324e-01 1.30406499e-01 3.30152437e-02] [ 2.91542172e-01 1.02243155e-01 1.73325196e-01 ... 5.65296151e-02 1.76546033e-02 1.66693389e-01] [ 2.22257316e-01 3.76294643e-01 2.11277917e-01 ... 2.28903517e-01 3.43954474e-01 1.52770668e-01]] [[ 1.40634328e-01 2.93247789e-01 5.50393537e-02 ... 2.30207980e-01 6.61415309e-02 2.70989928e-02] [ 1.11081995e-01 7.20834285e-02 1.08342394e-01 ... 2.28330195e-02 6.79589901e-03 1.25501186e-01] [ 1.15944080e-01 2.41565228e-01 1.18612610e-01 ... 1.14908054e-01 1.61080107e-01 1.15969211e-01]] ………………………….
示例
hn
輸出
這將產生以下輸出:
[[[-6.08105101e-02 3.86217088e-02 6.64453954e-03 8.18805695e-02 3.85607071e-02 -1.36945639e-02 7.45836645e-03 -5.46515081e-03 9.49622393e-02 6.39371723e-02 -6.37890724e-03 3.82240303e-02 9.11015049e-02 -2.01375950e-02 -7.29381144e-02 6.93765879e-02 2.71829776e-02 -6.64435029e-02 -8.45306814e-02 -1.03075653e-01 6.72040805e-02 -7.06537142e-02 -3.93818803e-02 5.16211614e-03 -4.79770005e-02 1.10734522e-01 1.56721435e-02 -6.93409378e-03 1.16915874e-01 -7.95962065e-02 -3.06530762e-02 8.42394680e-02 7.60370195e-02 2.17055440e-01 9.85361822e-03 1.16660878e-01 4.08297703e-02 1.24978097e-02 8.25245082e-02 2.28673983e-02 -7.88266212e-02 -8.04114193e-02 9.28791538e-02 -5.70827350e-03 -4.46166918e-02 -6.41122833e-02 1.80885363e-02 -2.37745279e-03 4.37298454e-02 1.28888980e-01 -3.07202265e-02 2.50503756e-02 4.00907174e-02 3.37077095e-03 -1.78839862e-02 8.90695080e-02 6.30150884e-02 1.11416787e-01 2.12221760e-02 -1.13236710e-01 5.39616570e-02 7.80710578e-02 -2.28817668e-02 1.92073174e-02 ………………………….
在下面的示例中,我們將使用 LSTM(),它將長短期記憶 (LSTM) RNN 應用於給定的輸入序列。
layer = mx.gluon.rnn.LSTM(100, 3) layer.initialize() input_seq = mx.nd.random.uniform(shape=(5, 3, 10)) out_seq = layer(input_seq) h0 = mx.nd.random.uniform(shape=(3, 3, 100)) c0 = mx.nd.random.uniform(shape=(3, 3, 100)) out_seq, hn = layer(input_seq,[h0,c0]) out_seq
輸出
輸出如下:
[[[ 9.00025964e-02 3.96071747e-02 1.83841765e-01 ... 3.95872220e-02 1.25569820e-01 2.15555862e-01] [ 1.55962542e-01 -3.10300849e-02 1.76772922e-01 ... 1.92474753e-01 2.30574399e-01 2.81707942e-02] [ 7.83204585e-02 6.53361529e-03 1.27262697e-01 ... 9.97719541e-02 1.28254429e-01 7.55299702e-02]] [[ 4.41036932e-02 1.35250352e-02 9.87644792e-02 ... 5.89378644e-03 5.23949116e-02 1.00922674e-01] [ 8.59075040e-02 -1.67027581e-02 9.69351009e-02 ... 1.17763653e-01 9.71239135e-02 2.25218050e-02] [ 4.34580036e-02 7.62207608e-04 6.37005866e-02 ... 6.14888743e-02 5.96345589e-02 4.72368896e-02]] ……………
示例
hn
輸出
執行程式碼時,您將看到以下輸出:
[ [[[ 2.21408084e-02 1.42750628e-02 9.53067932e-03 -1.22849066e-02 1.78788435e-02 5.99269159e-02 5.65306023e-02 6.42553642e-02 6.56616641e-03 9.80876666e-03 -1.15729487e-02 5.98640442e-02 -7.21173314e-03 -2.78371759e-02 -1.90690923e-02 2.21447181e-02 8.38765781e-03 -1.38521893e-02 -9.06938594e-03 1.21346042e-02 6.06449470e-02 -3.77471633e-02 5.65885007e-02 6.63008019e-02 -7.34188128e-03 6.46054149e-02 3.19911093e-02 4.11194898e-02 4.43960279e-02 4.92892228e-02 1.74766723e-02 3.40303481e-02 -5.23341820e-03 2.68163737e-02 -9.43402853e-03 -4.11836170e-02 1.55221792e-02 -5.05655073e-02 4.24557598e-03 -3.40388380e-02 ……………………
訓練模組
Gluon 中的訓練模組如下:
gluon.loss
在mxnet.gluon.loss模組中,Gluon 提供了預定義的損失函式。基本上,它包含用於訓練神經網路的損失函式。這就是它被稱為訓練模組的原因。
方法及其引數
以下是mxnet.gluon.loss訓練模組涵蓋的一些重要方法及其引數:
| 方法及其引數 | 定義 |
|---|---|
| Loss(weight, batch_axis, **kwargs) | 它充當損失函式的基類。 |
| L2Loss([weight, batch_axis]) | 它計算標籤和預測 (pred)之間的均方誤差 (MSE)。 |
| L1Loss([weight, batch_axis]) | 它計算標籤和pred之間的平均絕對誤差 (MAE)。 |
| SigmoidBinaryCrossEntropyLoss([…]) | 此方法用於二元分類的交叉熵損失。 |
| SigmoidBCELoss | 此方法用於二元分類的交叉熵損失。 |
| SoftmaxCrossEntropyLoss([axis, …]) | 它計算 softmax 交叉熵損失 (CEL)。 |
| SoftmaxCELoss | 它也計算 softmax 交叉熵損失。 |
| KLDivLoss([from_logits, axis, weight, …]) | 它用於 Kullback-Leibler 散度損失。 |
| CTCLoss([layout, label_layout, weight]) | 它用於連線時序分類損失 (TCL)。 |
| HuberLoss([rho, weight, batch_axis]) | 它計算平滑的 L1 損失。如果絕對誤差超過 rho,則平滑的 L1 損失將等於 L1 損失,否則等於 L2 損失。 |
| HingeLoss([margin, weight, batch_axis]) | 此方法計算通常在 SVM 中使用的鉸鏈損失函式。 |
| SquaredHingeLoss([margin, weight, batch_axis]) | 此方法計算在 SVM 中使用的軟邊緣損失函式。 |
| LogisticLoss([weight, batch_axis, label_format]) | 此方法計算邏輯損失。 |
| TripletLoss([margin, weight, batch_axis]) | 此方法根據三個輸入張量和一個正邊距計算三元組損失。 |
| PoissonNLLLoss([weight, from_logits, …]) | 該函式計算負對數似然損失。 |
| CosineEmbeddingLoss([weight, batch_axis, margin]) | 該函式計算向量之間的餘弦距離。 |
| SDMLLoss([smoothing_parameter, weight, …]) | 此方法根據兩個輸入張量和一個平滑權重 SDM 損失計算批處理平滑深度度量學習 (SDML) 損失。它使用小批次中的非配對樣本作為潛在的負樣本,學習配對樣本之間的相似性。 |
示例
眾所周知,mxnet.gluon.loss.loss將計算標籤和預測 (pred) 之間的 MSE(均方誤差)。它是藉助以下公式完成的:
gluon.parameter
mxnet.gluon.parameter是一個容器,它儲存 Block 的引數,即權重。
方法及其引數
以下是mxnet.gluon.parameter訓練模組涵蓋的一些重要方法及其引數:
| 方法及其引數 | 定義 |
|---|---|
| cast(dtype) | 此方法將把此引數的資料和梯度轉換為新的資料型別。 |
| data([ctx]) | 此方法將返回此引數在一個上下文上的副本。 |
| grad([ctx]) | 此方法將返回此引數在一個上下文上的梯度緩衝區。 |
| initialize([init, ctx, default_init, …]) | 此方法將初始化引數和梯度陣列。 |
| list_ctx() | 此方法將返回此引數已初始化的上下文列表。 |
| list_data() | 此方法將返回此引數在所有上下文上的副本。順序與建立順序相同。 |
| list_grad() | 此方法將返回所有上下文上的梯度緩衝區。順序與values()相同。 |
| list_row_sparse_data(row_id) | 此方法將返回所有上下文上“row_sparse”引數的副本。順序與建立順序相同。 |
| reset_ctx(ctx) | 此方法將引數重新分配到其他上下文。 |
| row_sparse_data(row_id) | 此方法將返回與row_id相同上下文上的“row_sparse”引數的副本。 |
| set_data(data) | 此方法將設定此引數在所有上下文上的值。 |
| var() | 此方法將返回表示此引數的符號。 |
| zero_grad() | 此方法將所有上下文上的梯度緩衝區設定為0。 |
實現示例
在下面的示例中,我們將使用initialize()方法初始化引數和梯度陣列,如下所示:
weight = mx.gluon.Parameter('weight', shape=(2, 2))
weight.initialize(ctx=mx.cpu(0))
weight.data()
輸出
輸出如下:
[[-0.0256899 0.06511251] [-0.00243821 -0.00123186]] <NDArray 2x2 @cpu(0)>
示例
weight.grad()
輸出
輸出如下所示:
[[0. 0.] [0. 0.]] <NDArray 2x2 @cpu(0)>
示例
weight.initialize(ctx=[mx.gpu(0), mx.gpu(1)]) weight.data(mx.gpu(0))
輸出
您將看到以下輸出:
[[-0.00873779 -0.02834515] [ 0.05484822 -0.06206018]] <NDArray 2x2 @gpu(0)>
示例
weight.data(mx.gpu(1))
輸出
執行上述程式碼後,您應該看到以下輸出:
[[-0.00873779 -0.02834515] [ 0.05484822 -0.06206018]] <NDArray 2x2 @gpu(1)>
gluon.trainer
mxnet.gluon.trainer 將最佳化器應用於一組引數。它應該與autograd一起使用。
方法及其引數
以下是mxnet.gluon.trainer訓練模組中涵蓋的一些重要方法及其引數:
| 方法及其引數 | 定義 |
|---|---|
| allreduce_grads() | 此方法將減少每個引數(權重)的不同上下文中的梯度。 |
| load_states(fname) | 顧名思義,此方法將載入訓練器狀態。 |
| save_states(fname) | 顧名思義,此方法將儲存訓練器狀態。 |
| set_learning_rate(lr) | 此方法將設定最佳化器的新學習率。 |
| step(batch_size[, ignore_stale_grad]) | 此方法將執行一步引數更新。它應該在autograd.backward()之後以及record()作用域之外呼叫。 |
| update(batch_size[, ignore_stale_grad]) | 此方法也執行一步引數更新。它應該在autograd.backward()之後以及record()作用域之外呼叫,並且在trainer.update()之後呼叫。 |
資料模組
Gluon的資料模組解釋如下:
gluon.data
Gluon在gluon.data模組中提供了大量內建的資料集實用程式。這就是它被稱為資料模組的原因。
類及其引數
以下是mxnet.gluon.data核心模組中涵蓋的一些重要方法及其引數。這些方法通常與資料集、取樣和DataLoader相關。
| 方法及其引數 | 定義 |
|---|---|
| ArrayDataset(*args) | 此方法表示一個數據集,它組合了兩個或多個數據集類物件。例如,資料集、列表、陣列等。 |
| BatchSampler(sampler, batch_size[, last_batch]) | 此方法包裝另一個Sampler。包裝後,它將返回樣本的小批次。 |
| DataLoader(dataset[, batch_size, shuffle, …]) | 類似於BatchSampler,但此方法從資料集載入資料。載入後,它將返回資料的小批次。 |
| 這表示抽象資料集類。 | |
| FilterSampler(fn, dataset) | 此方法表示來自資料集的樣本元素,對於這些元素,fn(函式)返回True。 |
| RandomSampler(length) | 此方法表示從[0, length)隨機取樣元素,不放回。 |
| RecordFileDataset(filename) | 它表示一個包裝RecordIO檔案的資料集。檔案的副檔名為.rec。 |
| 取樣器 | 這是取樣器的基類。 |
| SequentialSampler(length[, start]) | 它表示按順序從集合[start, start+length)中取樣元素。 |
| 它表示按順序從集合[start, start+length)中取樣元素。 | 這表示簡單的Dataset包裝器,特別是用於列表和陣列。 |
實現示例
在下面的示例中,我們將使用gluon.data.BatchSampler() API,它包裝另一個取樣器。它返回樣本的小批次。
import mxnet as mx from mxnet.gluon import data sampler = mx.gluon.data.SequentialSampler(15) batch_sampler = mx.gluon.data.BatchSampler(sampler, 4, 'keep') list(batch_sampler)
輸出
輸出如下:
[[0, 1, 2, 3], [4, 5, 6, 7], [8, 9, 10, 11], [12, 13, 14]]
gluon.data.vision.datasets
Gluon在gluon.data.vision.datasets模組中提供了大量預定義的視覺資料集函式。
類及其引數
MXNet為我們提供了有用且重要的資料集,其類和引數如下所示:
| 類及其引數 | 定義 |
|---|---|
| MNIST([root, train, transform]) | 這是一個有用的資料集,它為我們提供了手寫數字。MNIST資料集的網址是http://yann.lecun.com/exdb/mnist |
| FashionMNIST([root, train, transform]) | 此資料集包含Zalando的商品影像,包含時尚產品。它是原始MNIST資料集的直接替代品。您可以從此處獲取此資料集:https://github.com/zalandoresearch/fashion-mnist |
| CIFAR10([root, train, transform]) | 這是一個來自https://www.cs.toronto.edu/~kriz/cifar.html的影像分類資料集。在此資料集中,每個樣本都是形狀為(32, 32, 3)的影像。 |
| CIFAR100([root, fine_label, train, transform]) | 這是一個來自https://www.cs.toronto.edu/~kriz/cifar.html的CIFAR100影像分類資料集。它也具有每個樣本都是形狀為(32, 32, 3)的影像。 |
| ImageRecordDataset (filename[, flag, transform]) | 此資料集包裝了一個包含影像的RecordIO檔案。在此檔案中,每個樣本都是一個影像及其對應的標籤。 |
| ImageFolderDataset (root[, flag, transform]) | 這是一個用於載入儲存在資料夾結構中的影像檔案的資料集。 |
| ImageListDataset ([root, imglist, flag]) | 這是一個用於載入由條目列表指定的影像檔案的資料集。 |
示例
在下面的示例中,我們將展示ImageListDataset()的使用,它用於載入由條目列表指定的影像檔案:
# written to text file *.lst 0 0 root/cat/0001.jpg 1 0 root/cat/xxxa.jpg 2 0 root/cat/yyyb.jpg 3 1 root/dog/123.jpg 4 1 root/dog/023.jpg 5 1 root/dog/wwww.jpg # A pure list, each item is a list [imagelabel: float or list of float, imgpath] [[0, root/cat/0001.jpg] [0, root/cat/xxxa.jpg] [0, root/cat/yyyb.jpg] [1, root/dog/123.jpg] [1, root/dog/023.jpg] [1, root/dog/wwww.jpg]]
實用程式模組
Gluon中的實用程式模組如下所示:
gluon.utils
Gluon在gluon.utils模組中提供了大量內建的並行化實用程式最佳化器。它提供了各種用於訓練的實用程式。這就是它被稱為實用程式模組的原因。
函式及其引數
以下是此名為gluon.utils的實用程式模組中包含的函式及其引數:
| 函式及其引數 | 定義 |
|---|---|
| split_data(data, num_slice[, batch_axis, …]) | 此函式通常用於資料並行化,每個切片都發送到一個裝置,即GPU。它將NDArray沿batch_axis分成num_slice個切片。 |
| split_and_load(data, ctx_list[, batch_axis, …]) | 此函式將NDArray沿batch_axis分成len(ctx_list)個切片。與上面的split_data()函式唯一的區別在於,它還將每個切片載入到ctx_list中的一個上下文中。 |
| clip_global_norm(arrays, max_norm[, …]) | 此函式的作用是以這樣一種方式重新縮放NDArrays,即它們的2範數之和小於max_norm。 |
| check_sha1(filename, sha1_hash) | 此函式將檢查檔案內容的sha1雜湊是否與預期雜湊匹配。 |
| download(url[, path, overwrite, sha1_hash, …]) | 顧名思義,此函式將下載給定的URL。 |
| replace_file(src, dst) | 此函式將實現原子os.replace。它將在Linux和OSX上完成。 |