Apache MXNet - กลูออน Python API
ดังที่เราได้กล่าวไปแล้วในบทก่อนหน้านี้ว่า MXNet Gluon มี API ที่ชัดเจนกระชับและเรียบง่ายสำหรับโครงการ DL ช่วยให้ Apache MXNet สร้างต้นแบบสร้างและฝึกโมเดล DL โดยไม่เสียความเร็วในการฝึก
โมดูลหลัก
ให้เราเรียนรู้โมดูลหลักของกลูออนการเขียนโปรแกรมแอปพลิเคชัน Apache MXNet Python (API)
gluon.nn
Gluon มีเลเยอร์ NN ในตัวจำนวนมากในโมดูล gluon.nn นั่นคือเหตุผลที่เรียกว่าโมดูลหลัก
วิธีการและพารามิเตอร์
ต่อไปนี้เป็นวิธีการที่สำคัญและพารามิเตอร์ที่ครอบคลุม mxnet.gluon.nn โมดูลหลัก -
วิธีการและพารามิเตอร์ | คำจำกัดความ |
---|---|
การเปิดใช้งาน (การเปิดใช้งาน ** kwargs) | ตามความหมายของชื่อวิธีนี้ใช้ฟังก์ชันการเปิดใช้งานกับอินพุต |
AvgPool1D ([pool_size, strides, padding, …]) | นี่คือการดำเนินการรวมค่าเฉลี่ยสำหรับข้อมูลชั่วคราว |
AvgPool2D ([pool_size, strides, padding, …]) | นี่คือการดำเนินการรวมกันโดยเฉลี่ยสำหรับข้อมูลเชิงพื้นที่ |
AvgPool3D ([pool_size, strides, padding, …]) | นี่คือการดำเนินการรวมเฉลี่ยสำหรับข้อมูล 3 มิติ ข้อมูลอาจเป็นเชิงพื้นที่หรือเชิงพื้นที่ - ชั่วคราว |
BatchNorm ([แกนโมเมนตัมเอปไซลอนศูนย์กลาง ... ]) | แสดงถึงเลเยอร์การปรับมาตรฐานแบทช์ |
BatchNormReLU ([แกนโมเมนตัมเอปไซลอน ... ]) | นอกจากนี้ยังแสดงถึงเลเยอร์การทำให้เป็นมาตรฐานแบทช์ แต่มีฟังก์ชันการเปิดใช้งาน Relu |
บล็อก ([คำนำหน้าพารามิเตอร์]) | มันให้คลาสพื้นฐานสำหรับเลเยอร์และโมเดลของเครือข่ายประสาทเทียมทั้งหมด |
Conv1D (แชนเนล, kernel_size [, ก้าว, …]) | วิธีนี้ใช้สำหรับเลเยอร์คอนโวลูชั่น 1 มิติ ตัวอย่างเช่นการแปลงชั่วคราว |
Conv1DTranspose (ช่อง, kernel_size [, …]) | วิธีนี้ใช้สำหรับเลเยอร์ Convolution 1D แบบ Transposed |
Conv2D (แชแนล kernel_size [ก้าวย่าง…]) | วิธีนี้ใช้สำหรับเลเยอร์ Convolution 2D ตัวอย่างเช่นการแปลงเชิงพื้นที่เหนือรูปภาพ) |
Conv2DTranspose (ช่อง, kernel_size [, …]) | วิธีนี้ใช้สำหรับเลเยอร์ Convolution 2D แบบ Transposed |
Conv3D (แชนเนล, kernel_size [, ก้าว, …]) | วิธีนี้ใช้สำหรับเลเยอร์ Convolution 3D ตัวอย่างเช่นการแปลงเชิงพื้นที่มากกว่าปริมาณ |
Conv3DTranspose (ช่อง, kernel_size [, …]) | วิธีนี้ใช้สำหรับเลเยอร์ Convolution 3D แบบ Transposed |
หนาแน่น (หน่วย [, การเปิดใช้งาน, use_bias, …]) | วิธีนี้แสดงถึงเลเยอร์ NN ที่เชื่อมต่อหนาแน่นปกติของคุณ |
การออกกลางคัน (อัตรา [แกน]) | ตามความหมายของชื่อวิธีนี้จะใช้การออกกลางคันกับอินพุต |
ELU ([อัลฟา]) | วิธีนี้ใช้สำหรับ Exponential Linear Unit (ELU) |
การฝัง (input_dim, output_dim [, dtype, …]) | เปลี่ยนจำนวนเต็มที่ไม่เป็นลบให้เป็นเวกเตอร์หนาแน่นขนาดคงที่ |
แผ่ (** kwargs) | วิธีนี้จะทำให้อินพุตแบนเป็น 2 มิติ |
GELU (** kwargs) | วิธีนี้ใช้สำหรับ Gaussian Exponential Linear Unit (GELU) |
GlobalAvgPool1D ([เค้าโครง]) | ด้วยความช่วยเหลือของวิธีนี้เราสามารถดำเนินการรวมค่าเฉลี่ยทั่วโลกสำหรับข้อมูลชั่วคราว |
GlobalAvgPool2D ([เค้าโครง]) | ด้วยความช่วยเหลือของวิธีนี้เราสามารถดำเนินการรวมค่าเฉลี่ยทั่วโลกสำหรับข้อมูลเชิงพื้นที่ |
GlobalAvgPool3D ([เค้าโครง]) | ด้วยความช่วยเหลือของวิธีนี้เราสามารถดำเนินการรวมค่าเฉลี่ยทั่วโลกสำหรับข้อมูล 3 มิติ |
GlobalMaxPool1D ([เค้าโครง]) | ด้วยความช่วยเหลือของวิธีนี้เราสามารถทำการดำเนินการ global max pooling สำหรับข้อมูล 1 มิติได้ |
GlobalMaxPool2D ([เค้าโครง]) | ด้วยความช่วยเหลือของวิธีนี้เราสามารถดำเนินการรวมสูงสุดทั่วโลกสำหรับข้อมูล 2 มิติ |
GlobalMaxPool3D ([เค้าโครง]) | ด้วยความช่วยเหลือของวิธีนี้เราสามารถทำการดำเนินการ global max pooling สำหรับข้อมูล 3 มิติได้ |
GroupNorm ([num_groups, epsilon, center, …]) | วิธีนี้ใช้การทำให้เป็นมาตรฐานกลุ่มกับอาร์เรย์อินพุต nD |
HybridBlock ([คำนำหน้าพารามิเตอร์]) | วิธีนี้รองรับการส่งต่อด้วยทั้งสองอย่าง Symbol และ NDArray. |
HybridLambda(ฟังก์ชัน [คำนำหน้า]) | ด้วยความช่วยเหลือของวิธีนี้เราสามารถรวมตัวดำเนินการหรือนิพจน์เป็นวัตถุ HybridBlock |
HybridSequential ([คำนำหน้าพารามิเตอร์]) | ซ้อน HybridBlocks ตามลำดับ |
InstanceNorm ([แกน, เอปไซลอน, ศูนย์กลาง, มาตราส่วน, …]) | วิธีนี้ใช้การทำให้เป็นมาตรฐานอินสแตนซ์กับอาร์เรย์อินพุต nD |
ตัวอย่างการใช้งาน
ในตัวอย่างด้านล่างเราจะใช้ 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)))
Output
คุณจะเห็นผลลัพธ์ต่อไปนี้ -
[[0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 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)))
Output
ผลลัพธ์ดังต่อไปนี้ -
[[0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 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
กลูออนให้บิ้วอินจำนวนมาก recurrent neural network(RNN) เลเยอร์ในโมดูล gluon.rnn นั่นคือเหตุผลที่เรียกว่าโมดูลหลัก
วิธีการและพารามิเตอร์
ต่อไปนี้เป็นวิธีการที่สำคัญและพารามิเตอร์ที่ครอบคลุม mxnet.gluon.nn โมดูลหลัก:
วิธีการและพารามิเตอร์ | คำจำกัดความ |
---|---|
แบบสองทิศทางเซลล์ (l_cell, r_cell [, …]) | ใช้สำหรับเซลล์ Bidirectional Recurrent Neural Network (RNN) |
DropoutCell (อัตรา [แกนคำนำหน้าพารามิเตอร์]) | วิธีนี้จะใช้การออกกลางคันกับอินพุตที่กำหนด |
GRU (hidden_size [, num_layers, layout, …]) | ใช้ RNN หน่วยซ้ำหลายชั้น gated (GRU) กับลำดับอินพุตที่กำหนด |
GRUCell (hidden_size [, …]) | ใช้สำหรับเซลล์เครือข่าย Gated Rectified Unit (GRU) |
HybridRecurrentCell ([คำนำหน้า, params]) | วิธีนี้รองรับการผสม |
HybridSequentialRNNCell ([คำนำหน้า, params]) | ด้วยความช่วยเหลือของวิธีนี้เราสามารถซ้อนเซลล์ HybridRNN หลายเซลล์ตามลำดับ |
LSTM (hidden_size [, num_layers, layout, …]) 0 | ใช้ RNN หน่วยความจำระยะสั้นยาวหลายชั้น (LSTM) กับลำดับอินพุตที่กำหนด |
LSTMCell (hidden_size [, …]) | ใช้สำหรับเซลล์เครือข่าย Long-Short Term Memory (LSTM) |
ModifierCell (base_cell) | เป็นคลาสฐานสำหรับเซลล์โมดิฟายเออร์ |
RNN (hidden_size [, num_layers, การเปิดใช้งาน, …]) | ใช้ Elman RNN หลายชั้นกับ tanh หรือ ReLU ความไม่เป็นเชิงเส้นของลำดับอินพุตที่กำหนด |
RNNCell (hidden_size [, การเปิดใช้งาน, ... ]) | ใช้สำหรับเซลล์เครือข่ายประสาทที่เกิดซ้ำ Elman RNN |
RecurrentCell ([คำนำหน้า, params]) | แสดงถึงคลาสพื้นฐานที่เป็นนามธรรมสำหรับเซลล์ RNN |
SequentialRNNCell ([คำนำหน้า, params]) | ด้วยความช่วยเหลือของวิธีนี้เราสามารถซ้อนเซลล์ RNN หลายเซลล์ตามลำดับ |
ZoneoutCell (base_cell [, zoneout_outputs, …]) | วิธีนี้ใช้ Zoneout บนเซลล์ฐาน |
ตัวอย่างการใช้งาน
ในตัวอย่างด้านล่างเราจะใช้ GRU () ซึ่งใช้ RNN แบบหลายชั้น gated ที่เกิดซ้ำกับลำดับอินพุตที่กำหนด
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
สิ่งนี้สร้างผลลัพธ์ต่อไปนี้ -
[[[ 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
สิ่งนี้สร้างผลลัพธ์ต่อไปนี้ -
[[[-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 () ซึ่งใช้ RNN หน่วยความจำระยะสั้น (LSTM) กับลำดับอินพุตที่กำหนด
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
ผลลัพธ์ดังต่อไปนี้ -
[[[ 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
เมื่อคุณเรียกใช้รหัสคุณจะเห็นผลลัพธ์ต่อไปนี้ -
[
[[[ 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 โมดูลการฝึกอบรม:
วิธีการและพารามิเตอร์ | คำจำกัดความ |
---|---|
การสูญเสีย (น้ำหนัก batch_axis ** kwargs) | สิ่งนี้ทำหน้าที่เป็นคลาสพื้นฐานสำหรับการสูญเสีย |
L2Loss ([น้ำหนัก batch_axis]) | จะคำนวณข้อผิดพลาดกำลังสองค่าเฉลี่ย (MSE) ระหว่าง label และ prediction(pred). |
L1Loss ([น้ำหนัก batch_axis]) | จะคำนวณข้อผิดพลาดสัมบูรณ์เฉลี่ย (MAE) ระหว่าง label และ pred. |
SigmoidBinaryCrossEntropyLoss ([…]) | วิธีนี้ใช้สำหรับการสูญเสียข้ามเอนโทรปีสำหรับการจำแนกไบนารี |
ซิกมอยด์บีเซล | วิธีนี้ใช้สำหรับการสูญเสียข้ามเอนโทรปีสำหรับการจำแนกไบนารี |
SoftmaxCrossEntropyLoss ([แกน, …]) | คำนวณการสูญเสียเอนโทรปีข้าม softmax (CEL) |
ซอฟแม็กซ์เซลอส | นอกจากนี้ยังคำนวณการสูญเสียเอนโทรปีของ softmax ข้าม |
KLDivLoss ([from_logits, แกน, น้ำหนัก, …]) | ใช้สำหรับการสูญเสียความแตกต่างของ Kullback-Leibler |
CTCLoss ([เลย์เอาต์ label_layout น้ำหนัก]) | ใช้สำหรับผู้เชื่อมต่อ Temporal Classification Loss (TCL) |
HuberLoss ([rho, weight, batch_axis]) | คำนวณการสูญเสีย L1 ที่ราบรื่น การสูญเสีย L1 ที่ราบรื่นจะเท่ากับการสูญเสีย L1 หากข้อผิดพลาดสัมบูรณ์เกินค่า rho แต่เท่ากับการสูญเสีย L2 เป็นอย่างอื่น |
HingeLoss ([ระยะขอบน้ำหนัก batch_axis]) | วิธีนี้จะคำนวณฟังก์ชันการสูญเสียบานพับที่มักใช้ใน SVM: |
SquaredHingeLoss ([ระยะขอบน้ำหนัก batch_axis]) | วิธีนี้จะคำนวณฟังก์ชัน soft-margin loss ที่ใช้ใน SVM: |
LogisticLoss ([weight, batch_axis, label_format]) | วิธีนี้จะคำนวณการสูญเสียโลจิสติกส์ |
TripletLoss ([ระยะขอบน้ำหนัก batch_axis]) | วิธีนี้จะคำนวณการสูญเสียสามเท่าโดยมีตัวนับอินพุตสามตัวและส่วนต่างบวก |
PoissonNLLLoss ([น้ำหนัก from_logits, …]) | ฟังก์ชันนี้จะคำนวณการสูญเสียความเป็นไปได้ของบันทึกเชิงลบ |
CosineEmbeddingLoss ([น้ำหนัก batch_axis ขอบ]) | ฟังก์ชันคำนวณระยะห่างโคไซน์ระหว่างเวกเตอร์ |
SDMLLoss ([smoothing_parameter, weight, …]) | วิธีนี้จะคำนวณการสูญเสีย Batchwise Smoothed Deep Metric Learning (SDML) โดยให้อินพุตสองตัวและการสูญเสีย SDM ของน้ำหนักที่ราบรื่น เรียนรู้ความคล้ายคลึงกันระหว่างตัวอย่างที่จับคู่โดยใช้ตัวอย่างที่ไม่จับคู่ในมินิแบทช์เป็นตัวอย่างเชิงลบที่อาจเกิดขึ้น |
ตัวอย่าง
อย่างที่เราทราบกันดีว่า mxnet.gluon.loss.lossจะคำนวณ MSE (Mean Squared Error) ระหว่างป้ายกำกับและการคาดคะเน (pred) ทำได้ด้วยความช่วยเหลือของสูตรต่อไปนี้:
gluon.parameter
mxnet.gluon.parameter เป็นคอนเทนเนอร์ที่เก็บพารามิเตอร์เช่นน้ำหนักของบล็อก
วิธีการและพารามิเตอร์
ต่อไปนี้เป็นวิธีการที่สำคัญและพารามิเตอร์ที่ครอบคลุม mxnet.gluon.parameter โมดูลการฝึกอบรม -
วิธีการและพารามิเตอร์ | คำจำกัดความ |
---|---|
โยน (dtype) | วิธีนี้จะส่งข้อมูลและการไล่ระดับสีของพารามิเตอร์นี้ไปยังชนิดข้อมูลใหม่ |
ข้อมูล ([ctx]) | วิธีนี้จะส่งคืนสำเนาของพารามิเตอร์นี้ในบริบทเดียว |
ผู้สำเร็จการศึกษา ([ctx]) | วิธีนี้จะส่งคืนบัฟเฟอร์การไล่ระดับสีสำหรับพารามิเตอร์นี้ในบริบทเดียว |
เริ่มต้น ([init, ctx, default_init, …]) | วิธีนี้จะเริ่มต้นพารามิเตอร์และอาร์เรย์การไล่ระดับสี |
list_ctx () | วิธีนี้จะส่งคืนรายการบริบทที่พารามิเตอร์นี้เริ่มต้น |
list_data () | วิธีนี้จะส่งคืนสำเนาของพารามิเตอร์นี้ในบริบททั้งหมด มันจะทำในลำดับเดียวกับการสร้าง |
list_grad () | วิธีนี้จะส่งคืนบัฟเฟอร์การไล่ระดับสีในบริบททั้งหมด สิ่งนี้จะทำในลำดับเดียวกับvalues(). |
list_row_sparse_data (row_id) | วิธีนี้จะส่งคืนสำเนาของพารามิเตอร์ 'row_sparse' ในบริบททั้งหมด สิ่งนี้จะทำในลำดับเดียวกับการสร้าง |
reset_ctx (ctx) | วิธีนี้จะกำหนด Parameter ใหม่ให้กับบริบทอื่น ๆ |
row_sparse_data (row_id) | วิธีนี้จะส่งคืนสำเนาของพารามิเตอร์ 'row_sparse' ในบริบทเดียวกับ row_id's |
set_data (ข้อมูล) | วิธีนี้จะตั้งค่าของพารามิเตอร์นี้ในบริบททั้งหมด |
var () | วิธีนี้จะส่งคืนสัญลักษณ์ที่แสดงถึงพารามิเตอร์นี้ |
zero_grad () | วิธีนี้จะตั้งค่าบัฟเฟอร์การไล่ระดับสีในบริบททั้งหมดเป็น 0 |
ตัวอย่างการใช้งาน
ในตัวอย่างด้านล่างเราจะเริ่มต้นพารามิเตอร์และอาร์เรย์การไล่ระดับสีโดยใช้วิธี initialize () ดังนี้ -
weight = mx.gluon.Parameter('weight', shape=(2, 2))
weight.initialize(ctx=mx.cpu(0))
weight.data()
Output
ผลลัพธ์ดังต่อไปนี้ -
[[-0.0256899 0.06511251]
[-0.00243821 -0.00123186]]
<NDArray 2x2 @cpu(0)>
Example
weight.grad()
Output
ผลลัพธ์จะได้รับด้านล่าง -
[[0. 0.]
[0. 0.]]
<NDArray 2x2 @cpu(0)>
Example
weight.initialize(ctx=[mx.gpu(0), mx.gpu(1)])
weight.data(mx.gpu(0))
Output
คุณจะเห็นผลลัพธ์ต่อไปนี้ -
[[-0.00873779 -0.02834515]
[ 0.05484822 -0.06206018]]
<NDArray 2x2 @gpu(0)>
Example
weight.data(mx.gpu(1))
Output
เมื่อคุณรันโค้ดด้านบนคุณจะเห็นผลลัพธ์ต่อไปนี้ -
[[-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) | วิธีนี้จะกำหนดอัตราการเรียนรู้ใหม่ของเครื่องมือเพิ่มประสิทธิภาพ |
ขั้นตอน (batch_size [, เพิกเฉย_stale_grad]) | วิธีนี้จะทำการอัพเดตพารามิเตอร์หนึ่งขั้นตอน ควรเรียกตามหลังautograd.backward() และภายนอก record() ขอบเขต. |
อัปเดต (batch_size [, เพิกเฉย_stale_grad]) | วิธีนี้จะทำให้การอัปเดตพารามิเตอร์หนึ่งขั้นตอน ควรเรียกตามหลังautograd.backward() และภายนอก record() ขอบเขตและหลัง trainer.update () |
โมดูลข้อมูล
โมดูลข้อมูลของ Gluon อธิบายไว้ด้านล่าง -
gluon.data
Gluon มียูทิลิตี้ชุดข้อมูลในตัวจำนวนมากในโมดูล gluon.data นั่นคือเหตุผลที่เรียกว่าโมดูลข้อมูล
ชั้นเรียนและพารามิเตอร์
ต่อไปนี้เป็นวิธีการที่สำคัญและพารามิเตอร์ที่ครอบคลุมโดยโมดูลหลัก mxnet.gluon.data โดยทั่วไปวิธีการเหล่านี้เกี่ยวข้องกับชุดข้อมูลการสุ่มตัวอย่างและ DataLoader
ชุดข้อมูลวิธีการและพารามิเตอร์ | คำจำกัดความ |
---|---|
ArrayDataset (* args) | วิธีนี้แสดงถึงชุดข้อมูลที่รวมวัตถุที่คล้ายชุดข้อมูลตั้งแต่สองชิ้นขึ้นไป ตัวอย่างเช่นชุดข้อมูลรายการอาร์เรย์ ฯลฯ |
BatchSampler (ตัวอย่าง, batch_size [, last_batch]) | วิธีนี้พันทับอีกวิธีหนึ่ง Sampler. เมื่อห่อแล้วจะส่งคืนชุดตัวอย่างขนาดเล็ก |
DataLoader (ชุดข้อมูล [, batch_size, สับเปลี่ยน, ... ]) | คล้ายกับ BatchSampler แต่วิธีนี้โหลดข้อมูลจากชุดข้อมูล เมื่อโหลดแล้วจะส่งคืนชุดข้อมูลขนาดเล็ก |
สิ่งนี้แสดงถึงคลาสชุดข้อมูลนามธรรม | |
FilterSampler (fn, ชุดข้อมูล) | วิธีนี้แสดงถึงองค์ประกอบตัวอย่างจากชุดข้อมูลที่ fn (ฟังก์ชัน) ส่งกลับ True. |
RandomSampler (ความยาว) | วิธีนี้แสดงองค์ประกอบตัวอย่างจาก [0 ความยาว) แบบสุ่มโดยไม่มีการแทนที่ |
RecordFileDataset (ชื่อไฟล์) | แสดงถึงชุดข้อมูลที่ตัดทับไฟล์ RecordIO นามสกุลของไฟล์คือ.rec. |
ตัวอย่าง | นี่คือคลาสพื้นฐานสำหรับแซมเพลอร์ |
SequentialSampler (ความยาว [เริ่มต้น]) | ซึ่งแสดงถึงองค์ประกอบตัวอย่างจากชุด [start, start + length) ตามลำดับ |
ซึ่งแสดงถึงองค์ประกอบตัวอย่างจากชุด [start, start + length) ตามลำดับ | สิ่งนี้แสดงถึง Wrapper ชุดข้อมูลแบบง่ายโดยเฉพาะสำหรับรายการและอาร์เรย์ |
ตัวอย่างการใช้งาน
ในตัวอย่างด้านล่างเราจะใช้ 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)
Output
ผลลัพธ์ดังต่อไปนี้ -
[[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 ([รูทฝึกแปลงร่าง]) | นี่คือชุดข้อมูลที่มีประโยชน์ซึ่งให้ตัวเลขที่เขียนด้วยลายมือแก่เรา URL สำหรับชุดข้อมูล MNIST คือ http://yann.lecun.com/exdb/mnist |
FashionMNIST ([รูทรถไฟแปลงร่าง]) | ชุดข้อมูลนี้ประกอบด้วยรูปภาพบทความของ Zalando ซึ่งประกอบด้วยสินค้าแฟชั่น เป็นการแทนที่ชุดข้อมูล MNIST ดั้งเดิมแบบดรอปอิน คุณสามารถรับชุดข้อมูลนี้ได้จาก https://github.com/zalandoresearch/fashion-mnist |
CIFAR10 ([รูทรถไฟแปลงร่าง]) | นี่คือชุดข้อมูลการจำแนกรูปภาพจาก https://www.cs.toronto.edu/~kriz/cifar.html ในชุดข้อมูลนี้แต่ละตัวอย่างเป็นรูปภาพที่มีรูปร่าง (32, 32, 3) |
CIFAR100 ([root, fine_label, train, transform]) | นี่คือชุดข้อมูลการจำแนกภาพ CIFAR100 จาก https://www.cs.toronto.edu/~kriz/cifar.html นอกจากนี้ยังมีแต่ละตัวอย่างเป็นรูปภาพที่มีรูปร่าง (32, 32, 3) |
ImageRecordDataset (ชื่อไฟล์ [, แฟล็ก, การแปลง]) | ชุดข้อมูลนี้รวมอยู่ในไฟล์ RecordIO ที่มีรูปภาพ ในแต่ละตัวอย่างนี้เป็นภาพที่มีป้ายกำกับที่เกี่ยวข้อง |
ImageFolderDataset (รูท [แฟล็กการแปลง]) | นี่คือชุดข้อมูลสำหรับการโหลดไฟล์รูปภาพที่เก็บไว้ในโครงสร้างโฟลเดอร์ |
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 มีเครื่องมือเพิ่มประสิทธิภาพยูทิลิตี้ build-in parallelisation จำนวนมากในโมดูล gluon.utils มีระบบสาธารณูปโภคที่หลากหลายสำหรับการฝึกอบรม นั่นคือเหตุผลที่เรียกว่าโมดูลยูทิลิตี้
ฟังก์ชันและพารามิเตอร์
ต่อไปนี้เป็นฟังก์ชั่นและพารามิเตอร์ที่ประกอบด้วยโมดูลยูทิลิตี้ชื่อนี้ gluon.utils −
ฟังก์ชั่นและพารามิเตอร์ | คำจำกัดความ |
---|---|
Split_data (ข้อมูล, num_slice [, batch_axis, …]) | โดยปกติแล้วฟังก์ชันนี้จะใช้สำหรับการขนานข้อมูลและแต่ละชิ้นจะถูกส่งไปยังอุปกรณ์หนึ่งเช่น GPU มันแยก NDArray ออกเป็นnum_slice ชิ้นพร้อม batch_axis. |
Split_and_load (ข้อมูล ctx_list [, batch_axis, …]) | ฟังก์ชันนี้แบ่ง NDArray ออกเป็น len(ctx_list) ชิ้นพร้อม batch_axis. ข้อแตกต่างเพียงอย่างเดียวจากฟังก์ชัน split_data () ด้านบนคือมันยังโหลดแต่ละชิ้นไปยังบริบทเดียวใน ctx_list. |
clip_global_norm (อาร์เรย์ max_norm [, ... ]) | หน้าที่ของฟังก์ชันนี้คือการปรับขนาด NDArrays ใหม่ในลักษณะที่ผลรวมของ 2-norm มีค่าน้อยกว่า max_norm. |
check_sha1 (ชื่อไฟล์ sha1_hash) | ฟังก์ชันนี้จะตรวจสอบว่าแฮช sha1 ของเนื้อหาไฟล์ตรงกับแฮชที่คาดไว้หรือไม่ |
ดาวน์โหลด (url [เส้นทางเขียนทับ sha1_hash ... ]) | ตามที่ระบุชื่อฟังก์ชันนี้จะดาวน์โหลด URL ที่กำหนด |
replace_file (src, dst) | ฟังก์ชันนี้จะใช้ปรมาณู os.replace. มันจะทำด้วย Linux และ OSX |