Apache MXNet - API Python gluon

Như chúng ta đã thảo luận trong các chương trước rằng MXNet Gluon cung cấp một API rõ ràng, ngắn gọn và đơn giản cho các dự án DL. Nó cho phép Apache MXNet tạo mẫu, xây dựng và đào tạo các mô hình DL mà không làm giảm tốc độ đào tạo.

Mô-đun cốt lõi

Hãy để chúng tôi tìm hiểu các mô-đun cốt lõi của giao diện lập trình ứng dụng Apache MXNet Python (API) gluon.

gluon.nn

Gluon cung cấp một số lượng lớn các lớp NN tích hợp trong mô-đun gluon.nn. Đó là lý do nó được gọi là mô-đun lõi.

Các phương thức và tham số của chúng

Sau đây là một số phương pháp quan trọng và các tham số của chúng được mxnet.gluon.nn mô-đun cốt lõi -

Các phương thức và các tham số của nó Định nghĩa
Kích hoạt (kích hoạt, ** kwargs) Như tên của nó, phương pháp này áp dụng một chức năng kích hoạt cho đầu vào.
AvgPool1D ([pool_size, strides, padding,…]) Đây là hoạt động gộp trung bình cho dữ liệu tạm thời.
AvgPool2D ([pool_size, strides, padding,…]) Đây là hoạt động gộp trung bình cho dữ liệu không gian.
AvgPool3D ([pool_size, strides, padding,…]) Đây là hoạt động gộp trung bình cho dữ liệu 3D. Dữ liệu có thể là không gian hoặc không gian-thời gian.
BatchNorm ([trục, động lượng, epsilon, tâm,…]) Nó đại diện cho lớp chuẩn hóa hàng loạt.
BatchNormReLU ([trục, động lượng, epsilon,…]) Nó cũng đại diện cho lớp chuẩn hóa hàng loạt nhưng với chức năng kích hoạt Relu.
Khối ([tiền tố, tham số]) Nó cung cấp lớp cơ sở cho tất cả các lớp và mô hình mạng nơ-ron.
Conv1D (kênh, kernel_size [, strides,…]) Phương pháp này được sử dụng cho lớp chập 1-D. Ví dụ, tích chập theo thời gian.
Conv1DTranspose (kênh, kernel_size [,…]) Phương pháp này được sử dụng cho lớp tích chập 1D được vận chuyển.
Conv2D (kênh, kernel_size [, strides,…]) Phương pháp này được sử dụng cho lớp tích chập 2D. Ví dụ, tích chập không gian trên hình ảnh).
Conv2DTranspose (kênh, kernel_size [,…]) Phương pháp này được sử dụng cho lớp tích chập 2 chiều Transposed.
Conv3D (kênh, kernel_size [, strides,…]) Phương pháp này được sử dụng cho lớp tích chập 3D. Ví dụ, tích chập không gian trên khối lượng.
Conv3DTranspose (kênh, kernel_size [,…]) Phương pháp này được sử dụng cho lớp tích chập 3D Transposed.
Mật độ (đơn vị [, kích hoạt, use_bias,…]) Phương thức này đại diện cho lớp NN được kết nối dày đặc thường xuyên của bạn.
Bỏ học (tỷ lệ [, trục]) Như tên của nó, phương pháp này áp dụng Dropout cho đầu vào.
ELU ([alpha]) Phương pháp này được sử dụng cho Đơn vị tuyến tính hàm mũ (ELU).
Nhúng (input_dim, output_dim [, dtype,…]) Nó biến các số nguyên không âm thành các vectơ dày đặc có kích thước cố định.
Làm phẳng (** kwargs) Phương thức này làm phẳng đầu vào thành 2-D.
GELU (** kwargs) Phương pháp này được sử dụng cho Đơn vị tuyến tính hàm mũ Gaussian (GELU).
GlobalAvgPool1D ([bố cục]) Với sự trợ giúp của phương pháp này, chúng ta có thể thực hiện hoạt động gộp trung bình toàn cầu cho dữ liệu tạm thời.
GlobalAvgPool2D ([bố cục]) Với sự trợ giúp của phương pháp này, chúng tôi có thể thực hiện hoạt động gộp trung bình toàn cầu cho dữ liệu không gian.
GlobalAvgPool3D ([bố cục]) Với sự trợ giúp của phương pháp này, chúng tôi có thể thực hiện hoạt động gộp trung bình toàn cầu cho dữ liệu 3-D.
GlobalMaxPool1D ([bố cục]) Với sự trợ giúp của phương pháp này, chúng tôi có thể thực hiện hoạt động gộp tối đa toàn cầu cho dữ liệu 1-D.
GlobalMaxPool2D ([bố cục]) Với sự trợ giúp của phương pháp này, chúng tôi có thể thực hiện hoạt động tổng hợp tối đa toàn cầu cho dữ liệu 2-D.
GlobalMaxPool3D ([bố cục]) Với sự trợ giúp của phương pháp này, chúng tôi có thể thực hiện hoạt động tổng hợp tối đa toàn cầu cho dữ liệu 3-D.
GroupNorm ([num_groups, epsilon, center,…]) Phương thức này áp dụng chuẩn hóa nhóm cho mảng đầu vào nD.
HybridBlock ([tiền tố, tham số]) Phương pháp này hỗ trợ chuyển tiếp với cả hai SymbolNDArray.
HybridLambda(hàm [, tiền tố]) Với sự trợ giúp của phương thức này, chúng ta có thể bao bọc một toán tử hoặc một biểu thức dưới dạng một đối tượng HybridBlock.
HybridSequential ([tiền tố, tham số]) Nó sắp xếp các HybridBlocks một cách tuần tự.
InstanceNorm ([trục, epsilon, trung tâm, tỷ lệ,…]) Phương thức này áp dụng chuẩn hóa phiên bản cho mảng đầu vào nD.

Ví dụ triển khai

Trong ví dụ dưới đây, chúng ta sẽ sử dụng Block () để cung cấp lớp cơ sở cho tất cả các lớp và mô hình mạng nơ-ron.

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)))

Output

Bạn sẽ thấy kết quả sau:

[[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;

Trong ví dụ dưới đây, chúng ta sẽ sử dụng HybridBlock () hỗ trợ chuyển tiếp với cả Symbol và 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)))

Output

Đầu ra được đề cập bên dưới -

[[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 cung cấp một số lượng lớn cài sẵn recurrent neural network(RNN) các lớp trong mô-đun gluon.rnn. Đó là lý do, nó được gọi là mô-đun lõi.

Các phương thức và tham số của chúng

Sau đây là một số phương pháp quan trọng và các tham số của chúng được mxnet.gluon.nn mô-đun cốt lõi:

Các phương thức và các tham số của nó Định nghĩa
Hai chiềuCell (l_cell, r_cell [,…]) Nó được sử dụng cho ô Mạng thần kinh tái phát hai chiều (RNN).
DropoutCell (tỷ lệ [, trục, tiền tố, thông số]) Phương pháp này sẽ áp dụng bỏ học đối với đầu vào đã cho.
GRU (hidden_size [, num_layers, layout,…]) Nó áp dụng RNN đơn vị định kỳ nhiều lớp (GRU) cho một chuỗi đầu vào nhất định.
GRUCell (hidden_size [,…]) Nó được sử dụng cho tế bào mạng Gated Rectified Unit (GRU).
HybridRecurrentCell ([tiền tố, thông số]) Phương pháp này hỗ trợ hybridize.
HybridSequentialRNNCell ([tiền tố, tham số]) Với sự trợ giúp của phương pháp này, chúng ta có thể xếp chồng nhiều ô HybridRNN một cách tuần tự.
LSTM (hidden_size [, num_layers, layout,…]) 0 Nó áp dụng RNN bộ nhớ ngắn hạn (LSTM) nhiều lớp cho một chuỗi đầu vào nhất định.
LSTMCell (hidden_size [,…]) Nó được sử dụng cho ô mạng Bộ nhớ Dài hạn (LSTM).
ModifierCell (base_cell) Nó là lớp Cơ sở cho các ô bổ trợ.
RNN (hidden_size [, num_layers, kích hoạt,…]) Nó áp dụng Elman RNN nhiều lớp với tanh hoặc là ReLU không tuyến tính đối với một chuỗi đầu vào nhất định.
RNNCell (hidden_size [, kích hoạt,…]) Nó được sử dụng cho tế bào mạng nơ-ron lặp lại Elman RNN.
RecurrentCell ([tiền tố, thông số]) Nó đại diện cho lớp cơ sở trừu tượng cho các ô RNN.
SequentialRNNCell ([tiền tố, thông số]) Với sự trợ giúp của phương pháp này, chúng ta có thể xếp chồng nhiều ô RNN một cách tuần tự.
ZoneoutCell (base_cell [, zoneout_outputs,…]) Phương pháp này áp dụng Zoneout trên ô cơ sở.

Ví dụ triển khai

Trong ví dụ dưới đây, chúng ta sẽ sử dụng GRU () áp dụng RNN đơn vị định kỳ nhiều lớp (GRU) cho một chuỗi đầu vào nhất định.

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

Output

Điều này tạo ra kết quả sau:

[[[ 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]]
………………………….

Example

hn

Output

Điều này tạo ra kết quả sau:

[[[-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
………………………….

Trong ví dụ dưới đây, chúng ta sẽ sử dụng LSTM () áp dụng RNN của bộ nhớ dài hạn (LSTM) cho một chuỗi đầu vào nhất định.

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

Output

Đầu ra được đề cập bên dưới -

[[[ 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]]
……………

Example

hn

Output

Khi bạn chạy mã, bạn sẽ thấy kết quả sau:

[
[[[ 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
……………………

Mô-đun đào tạo

Các mô-đun đào tạo ở Gluon như sau:

gluon.loss

Trong mxnet.gluon.lossmô-đun, Gluon cung cấp chức năng mất mát được xác định trước. Về cơ bản, nó có những tổn thất cho việc đào tạo mạng nơ-ron. Đó là lý do nó được gọi là mô-đun đào tạo.

Các phương thức và tham số của chúng

Sau đây là một số phương pháp quan trọng và các tham số của chúng được mxnet.gluon.loss mô-đun đào tạo:

Các phương thức và các tham số của nó Định nghĩa
Giảm (trọng lượng, mẻ_axis, ** kwargs) Điều này hoạt động như lớp cơ sở cho sự mất mát.
L2Loss ([trọng lượng, batch_axis]) Nó tính toán sai số bình phương trung bình (MSE) giữa labelprediction(pred).
L1Loss ([trọng lượng, batch_axis]) Nó tính toán sai số tuyệt đối trung bình (MAE) giữa labelpred.
SigmoidBinaryCrossEntropyLoss ([…]) Phương pháp này được sử dụng cho tổn thất entropy chéo để phân loại nhị phân.
SigmoidBCELoss Phương pháp này được sử dụng cho tổn thất entropy chéo để phân loại nhị phân.
SoftmaxCrossEntropyLoss ([trục,…]) Nó tính toán tổn thất entropy chéo softmax (CEL).
SoftmaxCELoss Nó cũng tính toán tổn thất entropy chéo softmax.
KLDivLoss ([from_logits, axis, weight,…]) Nó được sử dụng cho tổn thất phân kỳ Kullback-Leibler.
CTCLoss ([layout, label_layout, weight]) Nó được sử dụng cho Tổn thất phân loại theo thời gian kết nối (TCL).
HuberLoss ([rho, weight, batch_axis]) Nó tính toán tổn thất L1 được làm mịn. Suy hao L1 được làm mịn sẽ bằng tổn thất L1 nếu sai số tuyệt đối vượt quá rho nhưng bằng với tổn thất L2 nếu ngược lại.
HingeLoss ([margin, weight, batch_axis]) Phương pháp này tính toán hàm mất bản lề thường được sử dụng trong SVM:
SquaredHingeLoss ([margin, weight, batch_axis]) Phương pháp này tính toán hàm tổn thất ký quỹ mềm được sử dụng trong SVM:
LogisticLoss ([trọng lượng, batch_axis, label_format]) Phương pháp này tính toán tổn thất logistic.
TripletLoss ([margin, weight, batch_axis]) Phương pháp này tính toán tổn thất ba lần với ba bộ căng đầu vào và một biên dương.
PoissonNLLLoss ([trọng lượng, from_logits,…]) Hàm tính toán khả năng mất Nhật ký Phủ định.
CosineEmbeddingLoss ([weight, batch_axis, margin]) Hàm tính khoảng cách cosine giữa các vectơ.
SDMLLoss ([Smoothhing_parameter, weight,…]) Phương pháp này tính toán Suy hao theo phương pháp học theo số liệu sâu làm mịn hàng loạt (SDML) dựa trên hai lực căng đầu vào và Giảm SDM trọng lượng làm mịn. Nó tìm hiểu sự tương đồng giữa các mẫu được ghép đôi bằng cách sử dụng các mẫu chưa được ghép nối trong minibatch làm ví dụ tiêu cực tiềm năng.

Thí dụ

Như chúng ta biết rằng mxnet.gluon.loss.losssẽ tính toán MSE (Mean Squared Error) giữa nhãn và dự đoán (trước). Nó được thực hiện với sự trợ giúp của công thức sau:

gluon.parameter

mxnet.gluon.parameter là một vùng chứa chứa các tham số tức là trọng lượng của các Khối.

Các phương thức và tham số của chúng

Sau đây là một số phương pháp quan trọng và các tham số của chúng được mxnet.gluon.parameter mô-đun đào tạo -

Các phương thức và các tham số của nó Định nghĩa
cast (loại) Phương thức này sẽ truyền dữ liệu và gradient của Tham số này sang một kiểu dữ liệu mới.
dữ liệu ([ctx]) Phương thức này sẽ trả về một bản sao của tham số này trên một ngữ cảnh.
grad ([ctx]) Phương thức này sẽ trả về một bộ đệm gradient cho tham số này trên một ngữ cảnh.
khởi tạo ([init, ctx, default_init,…]) Phương thức này sẽ khởi tạo mảng tham số và độ dốc.
list_ctx () Phương thức này sẽ trả về một danh sách các ngữ cảnh mà tham số này được khởi tạo.
list_data () Phương thức này sẽ trả về các bản sao của tham số này trên tất cả các ngữ cảnh. Nó sẽ được thực hiện theo thứ tự như khi tạo.
list_grad () Phương thức này sẽ trả về bộ đệm gradient trên tất cả các ngữ cảnh. Điều này sẽ được thực hiện theo thứ tự nhưvalues().
list_row_sparse_data (row_id) Phương thức này sẽ trả về các bản sao của tham số 'row_sparse' trên tất cả các ngữ cảnh. Điều này sẽ được thực hiện theo thứ tự giống như tạo.
reset_ctx (ctx) Phương thức này sẽ gán lại Tham số cho các ngữ cảnh khác.
row_sparse_data (row_id) Phương thức này sẽ trả về một bản sao của tham số 'row_sparse' trên cùng ngữ cảnh với row_id's.
set_data (dữ liệu) Phương thức này sẽ đặt giá trị của tham số này trên tất cả các ngữ cảnh.
var () Phương thức này sẽ trả về một ký hiệu đại diện cho tham số này.
zero_grad () Phương pháp này sẽ đặt bộ đệm gradient trên tất cả các ngữ cảnh thành 0.

Ví dụ triển khai

Trong ví dụ dưới đây, chúng ta sẽ khởi tạo các tham số và mảng gradient bằng cách sử dụng phương thức khởi tạo () như sau:

weight = mx.gluon.Parameter('weight', shape=(2, 2))
weight.initialize(ctx=mx.cpu(0))
weight.data()

Output

Đầu ra được đề cập bên dưới -

[[-0.0256899 0.06511251]
[-0.00243821 -0.00123186]]
<NDArray 2x2 @cpu(0)>

Example

weight.grad()

Output

Đầu ra được đưa ra dưới đây -

[[0. 0.]
[0. 0.]]
<NDArray 2x2 @cpu(0)>

Example

weight.initialize(ctx=[mx.gpu(0), mx.gpu(1)])
weight.data(mx.gpu(0))

Output

Bạn sẽ thấy kết quả sau:

[[-0.00873779 -0.02834515]
 [ 0.05484822 -0.06206018]]
<NDArray 2x2 @gpu(0)>

Example

weight.data(mx.gpu(1))

Output

Khi bạn thực thi đoạn mã trên, bạn sẽ thấy kết quả sau:

[[-0.00873779 -0.02834515]
 [ 0.05484822 -0.06206018]]
<NDArray 2x2 @gpu(1)>

gluon.trainer

mxnet.gluon.trainer áp dụng Trình tối ưu hóa trên một tập hợp các tham số. Nó nên được sử dụng cùng với autograd.

Các phương thức và tham số của chúng

Sau đây là một số phương pháp quan trọng và các tham số của chúng được mxnet.gluon.trainer mô-đun đào tạo -

Các phương thức và các tham số của nó Định nghĩa
allreduce_grads () Phương pháp này sẽ giảm độ dốc từ các ngữ cảnh khác nhau cho từng tham số (trọng số).
load_states (fname) Như tên của nó, phương pháp này sẽ tải trạng thái của trình huấn luyện.
save_states (fname) Như tên của nó, phương pháp này sẽ lưu trạng thái của người huấn luyện.
set_learning_rate (lr) Phương pháp này sẽ đặt tốc độ học tập mới của trình tối ưu hóa.
step (batch_size [, ignore_stale_grad]) Phương thức này sẽ thực hiện một bước cập nhật tham số. Nó nên được gọi sauautograd.backward() và bên ngoài record() phạm vi.
cập nhật (batch_size [, ignore_stale_grad]) Phương thức này cũng sẽ thực hiện một bước cập nhật tham số. Nó nên được gọi sauautograd.backward() và bên ngoài record() phạm vi và sau trình đào tạo.update ().

Mô-đun dữ liệu

Các mô-đun dữ liệu của Gluon được giải thích bên dưới:

gluon.data

Gluon cung cấp một số lượng lớn các tiện ích tập dữ liệu tích hợp trong mô-đun gluon.data. Đó là lý do nó được gọi là mô-đun dữ liệu.

Các lớp và tham số của chúng

Sau đây là một số phương thức quan trọng và các thông số của chúng được mô-đun lõi mxnet.gluon.data bao phủ. Các phương pháp này thường liên quan đến Tập dữ liệu, Lấy mẫu và Trình tải dữ liệu.

Dataset
Các phương thức và các tham số của nó Định nghĩa
ArrayDataset (* args) Phương thức này đại diện cho một tập dữ liệu kết hợp hai hoặc nhiều hơn hai đối tượng giống như tập dữ liệu. Ví dụ: Tập dữ liệu, danh sách, mảng, v.v.
BatchSampler (lấy mẫu, batch_size [, last_batch]) Phương pháp này bao trùm lên phương pháp khác Sampler. Sau khi bọc nó sẽ trả về các lô mẫu nhỏ.
DataLoader (tập dữ liệu [, batch_size, shuffle,…]) Tương tự như BatchSampler nhưng phương pháp này tải dữ liệu từ một tập dữ liệu. Sau khi được tải, nó trả về các lô dữ liệu nhỏ.
Điều này đại diện cho lớp tập dữ liệu trừu tượng.
FilterSampler (fn, tập dữ liệu) Phương thức này đại diện cho các phần tử mẫu từ Tập dữ liệu mà fn (hàm) trả về True.
RandomSampler (chiều dài) Phương pháp này đại diện cho các phần tử mẫu từ [0, chiều dài) một cách ngẫu nhiên mà không cần thay thế.
RecordFileDataset (tên tệp) Nó đại diện cho một tập dữ liệu gói trên một tệp RecordIO. Phần mở rộng của tệp là.rec.
Người lấy mẫu Đây là lớp cơ sở cho người lấy mẫu.
SequentialSampler (length [, start]) Nó đại diện cho các phần tử mẫu từ tập hợp [bắt đầu, bắt đầu + chiều dài) một cách tuần tự.
Nó đại diện cho các phần tử mẫu từ tập hợp [bắt đầu, bắt đầu + chiều dài) một cách tuần tự. Điều này đại diện cho trình bao bọc Dataset đơn giản, đặc biệt cho danh sách và mảng.

Ví dụ triển khai

Trong ví dụ dưới đây, chúng ta sẽ sử dụng gluon.data.BatchSampler()API, bao bọc trên một trình lấy mẫu khác. Nó trả về các lô mẫu nhỏ.

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)

Output

Đầu ra được đề cập bên dưới -

[[0, 1, 2, 3], [4, 5, 6, 7], [8, 9, 10, 11], [12, 13, 14]]

gluon.data.vision.datasets

Gluon cung cấp một số lượng lớn các hàm tập dữ liệu thị lực được xác định trước trong gluon.data.vision.datasets mô-đun.

Các lớp và tham số của chúng

MXNet cung cấp cho chúng tôi các tập dữ liệu hữu ích và quan trọng, có các lớp và tham số được đưa ra bên dưới:

Các lớp và các thông số của nó Định nghĩa
MNIST ([gốc, đào tạo, biến đổi]) Đây là một tập dữ liệu hữu ích cung cấp cho chúng ta các chữ số viết tay. Url cho tập dữ liệu MNIST là http://yann.lecun.com/exdb/mnist
FashionMNIST ([gốc, đào tạo, biến đổi]) Tập dữ liệu này bao gồm các hình ảnh bài viết của Zalando bao gồm các sản phẩm thời trang. Nó là bản thay thế cho tập dữ liệu MNIST gốc. Bạn có thể lấy bộ dữ liệu này từ https://github.com/zalandoresearch/fashion-mnist
CIFAR10 ([gốc, đào tạo, biến đổi]) Đây là tập dữ liệu phân loại hình ảnh từ https://www.cs.toronto.edu/~kriz/cifar.html. Trong tập dữ liệu này, mỗi mẫu là một hình ảnh có hình dạng (32, 32, 3).
CIFAR100 ([root, fine_label, train, convert]) Đây là tập dữ liệu phân loại hình ảnh CIFAR100 từ https://www.cs.toscape.edu/~kriz/cifar.html. Nó cũng có mỗi mẫu là một hình ảnh với hình dạng (32, 32, 3).
ImageRecordDataset (tên tệp [, cờ, biến đổi]) Tập dữ liệu này bao bọc bên ngoài tệp RecordIO có chứa hình ảnh. Trong mỗi mẫu này là một hình ảnh có nhãn tương ứng.
ImageFolderDataset (root [, cờ, biến đổi]) Đây là tập dữ liệu để tải các tệp hình ảnh được lưu trữ trong cấu trúc thư mục.
ImageListDataset ([root, imglist, flag]) Đây là tập dữ liệu để tải các tệp hình ảnh được chỉ định bởi danh sách các mục nhập.

Thí dụ

Trong ví dụ dưới đây, chúng tôi sẽ hiển thị việc sử dụng ImageListDataset (), được sử dụng để tải các tệp hình ảnh được chỉ định bởi danh sách các mục nhập -

# 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]]

Mô-đun tiện ích

Các mô-đun tiện ích trong Gluon như sau:

gluon.utils

Gluon cung cấp một số lượng lớn công cụ tối ưu hóa tiện ích song song tích hợp trong mô-đun gluon.utils. Nó cung cấp nhiều tiện ích cho việc đào tạo. Đó là lý do nó được gọi là mô-đun tiện ích.

Các chức năng và thông số của chúng

Sau đây là các chức năng và tham số của chúng bao gồm trong mô-đun tiện ích này có tên gluon.utils −

Các chức năng và các thông số của nó Định nghĩa
split_data (dữ liệu, num_slice [, batch_axis,…]) Chức năng này thường được sử dụng cho dữ liệu song song và mỗi lát cắt được gửi đến một thiết bị tức là GPU. Nó chia một NDArray thànhnum_slice lát dọc batch_axis.
split_and_load (dữ liệu, ctx_list [, batch_axis,…]) Hàm này chia một NDArray thành len(ctx_list) lát dọc batch_axis. Sự khác biệt duy nhất so với hàm split_data () ở trên là, nó cũng tải từng lát vào một ngữ cảnh trong ctx_list.
clip_global_norm (mảng, max_norm [,…]) Công việc của chức năng này là bán lại các NDArrays theo cách sao cho tổng 2 chuẩn của chúng nhỏ hơn max_norm.
check_sha1 (tên tệp, sha1_hash) Hàm này sẽ kiểm tra xem băm sha1 của nội dung tệp có khớp với băm mong đợi hay không.
tải xuống (url [, đường dẫn, ghi đè, sha1_hash,…]) Như tên chỉ định, chức năng này sẽ tải xuống một URL nhất định.
Replace_file (src, dst) Hàm này sẽ thực hiện nguyên tử os.replace. nó sẽ được thực hiện với Linux và OSX.