Apache MXNet - Python API ndarray
Bab ini menjelaskan pustaka ndarray yang tersedia di Apache MXNet.
Mxnet.ndarray
Pustaka NDArray Apache MXNet mendefinisikan DS inti (struktur data) untuk semua komputasi matematis. Dua pekerjaan dasar NDArray adalah sebagai berikut -
Ini mendukung eksekusi cepat pada berbagai konfigurasi perangkat keras.
Ini secara otomatis memparalelkan beberapa operasi di seluruh perangkat keras yang tersedia.
Contoh yang diberikan di bawah ini menunjukkan bagaimana seseorang dapat membuat NDArray dengan menggunakan 'array' 1-D dan 2-D dari daftar Python biasa -
import mxnet as mx
from mxnet import nd
x = nd.array([1,2,3,4,5,6,7,8,9,10])
print(x)
Output
Outputnya diberikan di bawah ini:
[ 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.]
<NDArray 10 @cpu(0)>
Example
y = nd.array([[1,2,3,4,5,6,7,8,9,10], [1,2,3,4,5,6,7,8,9,10], [1,2,3,4,5,6,7,8,9,10]])
print(y)
Output
Ini menghasilkan keluaran berikut -
[[ 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.]
[ 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.]
[ 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.]]
<NDArray 3x10 @cpu(0)>
Sekarang mari kita bahas secara rinci tentang kelas, fungsi, dan parameter dari ndarray API MXNet.
Kelas
Tabel berikut terdiri dari kelas-kelas ndarray API dari MXNet -
Kelas | Definisi |
---|---|
CachedOp (sym [, flags]) | Ini digunakan untuk pegangan operator cache. |
NDArray (pegangan [, dapat ditulis]) | Ini digunakan sebagai objek array yang mewakili array homogen multi-dimensi dari item berukuran tetap. |
Fungsi dan parameternya
Berikut adalah beberapa fungsi penting dan parameternya yang dicakup oleh mxnet.ndarray API -
Fungsi & Parameternya | Definisi |
---|---|
Activation([data, act_type, out, name]) | Ini menerapkan elemen fungsi aktivasi ke input. Mendukung fungsi aktivasi relu, sigmoid, tanh, softrelu, softsign. |
BatchNorm([data, gamma, beta, moving_mean,…]) | Ini digunakan untuk normalisasi batch. Fungsi ini menormalkan kumpulan data dengan mean dan varians. Ini menerapkan skala gamma dan offset beta. |
BilinearSampler([data, grid, cudnn_off,…]) | Fungsi ini menerapkan sampling bilinear untuk memasukkan peta fitur. Sebenarnya itu adalah kunci dari “Spatial Transformer Networks”. Jika Anda familiar dengan fungsi remap di OpenCV, penggunaan fungsi ini sangat mirip dengan itu. Satu-satunya perbedaan adalah bahwa ia memiliki umpan mundur. |
BlockGrad ([data, keluar, nama]) | Seperti yang ditentukan namanya, fungsi ini menghentikan komputasi gradien. Ini pada dasarnya menghentikan gradien terakumulasi dari input yang mengalir melalui operator ini ke arah belakang. |
cast ([data, dtype, out, name]) | Fungsi ini akan mentransmisikan semua elemen masukan ke tipe baru. |
Contoh Implementasi
Pada contoh di bawah ini, kita akan menggunakan fungsi BilinierSampler () untuk memperkecil data dua kali dan menggeser data secara horizontal sebesar -1 piksel -
import mxnet as mx
from mxnet import nd
data = nd.array([[[[2, 5, 3, 6],
[1, 8, 7, 9],
[0, 4, 1, 8],
[2, 0, 3, 4]]]])
affine_matrix = nd.array([[2, 0, 0],
[0, 2, 0]])
affine_matrix = nd.reshape(affine_matrix, shape=(1, 6))
grid = nd.GridGenerator(data=affine_matrix, transform_type='affine', target_shape=(4, 4))
output = nd.BilinearSampler(data, grid)
Output
Saat Anda menjalankan kode di atas, Anda akan melihat output berikut:
[[[[0. 0. 0. 0. ]
[0. 4.0000005 6.25 0. ]
[0. 1.5 4. 0. ]
[0. 0. 0. 0. ]]]]
<NDArray 1x1x4x4 @cpu(0)>
Output di atas menunjukkan pembesaran data dua kali.
Contoh menggeser data sebesar -1 piksel adalah sebagai berikut -
import mxnet as mx
from mxnet import nd
data = nd.array([[[[2, 5, 3, 6],
[1, 8, 7, 9],
[0, 4, 1, 8],
[2, 0, 3, 4]]]])
warp_matrix = nd.array([[[[1, 1, 1, 1],
[1, 1, 1, 1],
[1, 1, 1, 1],
[1, 1, 1, 1]],
[[0, 0, 0, 0],
[0, 0, 0, 0],
[0, 0, 0, 0],
[0, 0, 0, 0]]]])
grid = nd.GridGenerator(data=warp_matrix, transform_type='warp')
output = nd.BilinearSampler(data, grid)
Output
Outputnya dinyatakan di bawah ini -
[[[[5. 3. 6. 0.]
[8. 7. 9. 0.]
[4. 1. 8. 0.]
[0. 3. 4. 0.]]]]
<NDArray 1x1x4x4 @cpu(0)>
Demikian pula, contoh berikut menunjukkan penggunaan fungsi cast () -
nd.cast(nd.array([300, 10.1, 15.4, -1, -2]), dtype='uint8')
Output
Setelah dieksekusi, Anda akan menerima output berikut -
[ 44 10 15 255 254]
<NDArray 5 @cpu(0)>
ndarray.contrib
Contrib NDArray API didefinisikan dalam paket ndarray.contrib. Ini biasanya menyediakan banyak API eksperimental yang berguna untuk fitur baru. API ini berfungsi sebagai tempat komunitas di mana mereka dapat mencoba fitur-fitur baru. Kontributor fitur juga akan mendapatkan umpan balik.
Fungsi dan parameternya
Berikut adalah beberapa fungsi penting dan parameternya yang dicakup oleh mxnet.ndarray.contrib API -
Fungsi & Parameternya | Definisi |
---|---|
rand_zipfian(true_classes, num_sampled,…) | Fungsi ini mengambil sampel acak dari sekitar distribusi Zipfian. Distribusi dasar dari fungsi ini adalah distribusi Zipfian. Fungsi ini secara acak mengambil sampel num_sampled kandidat dan elemen sampled_candidates diambil dari distribusi dasar yang diberikan di atas. |
foreach(body, data, init_states) | Sesuai namanya, fungsi ini menjalankan loop for dengan komputasi yang ditentukan pengguna melalui NDArray pada dimensi 0. Fungsi ini mensimulasikan loop for dan body memiliki komputasi untuk iterasi loop for. |
while_loop (cond, func, loop_vars [,…]) | Sesuai namanya, fungsi ini menjalankan while loop dengan komputasi dan kondisi loop yang ditentukan pengguna. Fungsi ini mensimulasikan while loop yang secara literal melakukan komputasi yang disesuaikan jika kondisinya terpenuhi. |
cond(pred, lalu_func, else_func) | Sesuai namanya, fungsi ini menjalankan if-then-else menggunakan kondisi dan komputasi yang ditentukan pengguna. Fungsi ini mensimulasikan cabang if-like yang memilih untuk melakukan salah satu dari dua penghitungan yang disesuaikan menurut kondisi yang ditentukan. |
isinf(data) | Fungsi ini melakukan pemeriksaan elemen-bijaksana untuk menentukan apakah NDArray berisi elemen tak terbatas atau tidak. |
getnnz([data, sumbu, keluar, nama]) | Fungsi ini memberi kita jumlah nilai yang disimpan untuk tensor renggang. Ini juga mencakup nol eksplisit. Ini hanya mendukung matriks CSR pada CPU. |
mempersyaratkan ([data, rentang_min, rentang_aks,…]) | Fungsi ini menghitung ulang data yang diberikan yang dikelompokkan dalam int32 dan ambang yang sesuai, menjadi int8 menggunakan ambang batas minimum dan maksimum baik yang dihitung pada saat runtime atau dari kalibrasi. |
Contoh Implementasi
Dalam contoh di bawah ini, kita akan menggunakan fungsi rand_zipfian untuk menggambar sampel acak dari sekitar distribusi Zipfian -
import mxnet as mx
from mxnet import nd
trueclass = mx.nd.array([2])
samples, exp_count_true, exp_count_sample = mx.nd.contrib.rand_zipfian(trueclass, 3, 4)
samples
Output
Anda akan melihat output berikut -
[0 0 1]
<NDArray 3 @cpu(0)>
Example
exp_count_true
Output
Outputnya diberikan di bawah ini:
[0.53624076]
<NDArray 1 @cpu(0)>
Example
exp_count_sample
Output
Ini menghasilkan keluaran sebagai berikut:
[1.29202967 1.29202967 0.75578891]
<NDArray 3 @cpu(0)>
Pada contoh di bawah ini, kami akan menggunakan fungsi tersebut while_loop untuk menjalankan loop sementara untuk komputasi yang ditentukan pengguna dan kondisi loop:
cond = lambda i, s: i <= 7
func = lambda i, s: ([i + s], [i + 1, s + i])
loop_var = (mx.nd.array([0], dtype="int64"), mx.nd.array([1], dtype="int64"))
outputs, states = mx.nd.contrib.while_loop(cond, func, loop_vars, max_iterations=10)
outputs
Output
Outputnya ditunjukkan di bawah ini -
[
[[ 1]
[ 2]
[ 4]
[ 7]
[ 11]
[ 16]
[ 22]
[ 29]
[3152434450384]
[ 257]]
<NDArray 10x1 @cpu(0)>]
Example
States
Output
Ini menghasilkan keluaran berikut -
[
[8]
<NDArray 1 @cpu(0)>,
[29]
<NDArray 1 @cpu(0)>]
ndarray.image
Image NDArray API didefinisikan dalam paket ndarray.image. Sesuai namanya, biasanya digunakan untuk gambar dan fiturnya.
Fungsi dan parameternya
Berikut adalah beberapa fungsi penting & parameternya yang dicakup oleh mxnet.ndarray.image API-
Fungsi & Parameternya | Definisi |
---|---|
adjust_lighting([data, alfa, keluar, nama]) | Sesuai namanya, fungsi ini mengatur tingkat pencahayaan dari input. Ini mengikuti gaya AlexNet. |
crop([data, x, y, lebar, tinggi, keluar, nama]) | Dengan bantuan fungsi ini, kita dapat memotong gambar NDArray bentuk (H x W x C) atau (N x H x W x C) ke ukuran yang diberikan oleh pengguna. |
normalize([data, mean, std, out, name]) | Ini akan menormalkan tensor bentuk (C x H x W) atau (N x C x H x W) dengan mean dan standard deviation(SD). |
random_crop ([data, xrange, yrange, lebar,…]) | Mirip dengan crop (), ini secara acak memotong gambar NDArray bentuk (H x W x C) atau (N x H x W x C) ke ukuran yang diberikan oleh pengguna. Ini akan meningkatkan hasil jika src lebih kecil dari ukurannya. |
random_lighting([data, alpha_std, out, name]) | Sesuai namanya, fungsi ini menambahkan noise PCA secara acak. Ini juga mengikuti gaya AlexNet. |
random_resized_crop([data, xrange, thn,…]) | Ini juga memotong gambar secara acak NDArray bentuk (H x W x C) atau (N x H x W x C) ke ukuran yang diberikan. Ini akan meningkatkan hasilnya, jika src lebih kecil dari ukurannya. Ini akan mengacak area dan aspek rasio juga. |
resize([data, size, keep_ratio, interp,…]) | Sesuai dengan namanya, fungsi ini akan mengubah ukuran gambar NDArray bentuk (H x W x C) atau (N x H x W x C) ke ukuran yang diberikan oleh pengguna. |
to_tensor([data, keluar, nama]) | Ini mengubah gambar NDArray bentuk (H x W x C) atau (N x H x W x C) dengan nilai dalam rentang [0, 255] menjadi tensor NDArray bentuk (C x H x W) atau ( N x C x H x W) dengan nilai dalam rentang [0, 1]. |
Contoh Implementasi
Pada contoh di bawah ini, kita akan menggunakan fungsi to_tensor untuk mengubah gambar NDArray bentuk (H x W x C) atau (N x H x W x C) dengan nilai dalam rentang [0, 255] menjadi tensor NDArray bentuk (C x H x W) atau (N x C x H x W) dengan nilai dalam rentang [0, 1].
import numpy as np
img = mx.nd.random.uniform(0, 255, (4, 2, 3)).astype(dtype=np.uint8)
mx.nd.image.to_tensor(img)
Output
Anda akan melihat output berikut -
[[[0.972549 0.5058824 ]
[0.6039216 0.01960784]
[0.28235295 0.35686275]
[0.11764706 0.8784314 ]]
[[0.8745098 0.9764706 ]
[0.4509804 0.03529412]
[0.9764706 0.29411766]
[0.6862745 0.4117647 ]]
[[0.46666667 0.05490196]
[0.7372549 0.4392157 ]
[0.11764706 0.47843137]
[0.31764707 0.91764706]]]
<NDArray 3x4x2 @cpu(0)>
Example
img = mx.nd.random.uniform(0, 255, (2, 4, 2, 3)).astype(dtype=np.uint8)
mx.nd.image.to_tensor(img)
Output
Saat Anda menjalankan kode, Anda akan melihat output berikut -
[[[[0.0627451 0.5647059 ]
[0.2627451 0.9137255 ]
[0.57254905 0.27450982]
[0.6666667 0.64705884]]
[[0.21568628 0.5647059 ]
[0.5058824 0.09019608]
[0.08235294 0.31764707]
[0.8392157 0.7137255 ]]
[[0.6901961 0.8627451 ]
[0.52156866 0.91764706]
[0.9254902 0.00784314]
[0.12941177 0.8392157 ]]]
[[[0.28627452 0.39607844]
[0.01960784 0.36862746]
[0.6745098 0.7019608 ]
[0.9607843 0.7529412 ]]
[[0.2627451 0.58431375]
[0.16470589 0.00392157]
[0.5686275 0.73333335]
[0.43137255 0.57254905]]
[[0.18039216 0.54901963]
[0.827451 0.14509805]
[0.26666668 0.28627452]
[0.24705882 0.39607844]]]]
<NDArgt;ray 2x3x4x2 @cpu(0)>
Pada contoh di bawah ini, kami akan menggunakan fungsi tersebut normalize untuk menormalkan tensor bentuk (C x H x W) atau (N x C x H x W) dengan mean dan standard deviation(SD).
img = mx.nd.random.uniform(0, 1, (3, 4, 2))
mx.nd.image.normalize(img, mean=(0, 1, 2), std=(3, 2, 1))
Output
Ini menghasilkan keluaran berikut -
[[[ 0.29391178 0.3218054 ]
[ 0.23084386 0.19615503]
[ 0.24175143 0.21988946]
[ 0.16710812 0.1777354 ]]
[[-0.02195817 -0.3847335 ]
[-0.17800489 -0.30256534]
[-0.28807247 -0.19059572]
[-0.19680339 -0.26256624]]
[[-1.9808068 -1.5298678 ]
[-1.6984252 -1.2839255 ]
[-1.3398265 -1.712009 ]
[-1.7099224 -1.6165378 ]]]
<NDArray 3x4x2 @cpu(0)>
Example
img = mx.nd.random.uniform(0, 1, (2, 3, 4, 2))
mx.nd.image.normalize(img, mean=(0, 1, 2), std=(3, 2, 1))
Output
Ketika Anda menjalankan kode di atas, Anda akan melihat output berikut -
[[[[ 2.0600514e-01 2.4972327e-01]
[ 1.4292289e-01 2.9281738e-01]
[ 4.5158025e-02 3.4287784e-02]
[ 9.9427439e-02 3.0791296e-02]]
[[-2.1501756e-01 -3.2297665e-01]
[-2.0456362e-01 -2.2409186e-01]
[-2.1283737e-01 -4.8318747e-01]
[-1.7339960e-01 -1.5519112e-02]]
[[-1.3478968e+00 -1.6790028e+00]
[-1.5685816e+00 -1.7787373e+00]
[-1.1034534e+00 -1.8587360e+00]
[-1.6324382e+00 -1.9027401e+00]]]
[[[ 1.4528830e-01 3.2801408e-01]
[ 2.9730779e-01 8.6780310e-02]
[ 2.6873133e-01 1.7900752e-01]
[ 2.3462953e-01 1.4930873e-01]]
[[-4.4988656e-01 -4.5021546e-01]
[-4.0258706e-02 -3.2384416e-01]
[-1.4287934e-01 -2.6537544e-01]
[-5.7649612e-04 -7.9429924e-02]]
[[-1.8505517e+00 -1.0953522e+00]
[-1.1318740e+00 -1.9624406e+00]
[-1.8375070e+00 -1.4916846e+00]
[-1.3844404e+00 -1.8331525e+00]]]]
<NDArray 2x3x4x2 @cpu(0)>
ndarray.random
API NDArray Acak didefinisikan dalam paket ndarray.random. Seperti namanya, itu adalah generator distribusi acak NDArray API dari MXNet.
Fungsi dan parameternya
Berikut adalah beberapa fungsi penting dan parameternya yang dicakup oleh mxnet.ndarray.random API -
Fungsi dan Parameternya | Definisi |
---|---|
seragam ([rendah, tinggi, bentuk, tipe d, ctx, keluar]) | Ini menghasilkan sampel acak dari distribusi seragam. |
normal ([loc, scale, shape, dtype, ctx, out]) | Ini menghasilkan sampel acak dari distribusi normal (Gaussian). |
randn (* bentuk, ** kwargs) | Ini menghasilkan sampel acak dari distribusi normal (Gaussian). |
eksponensial ([skala, bentuk, tipe d, ctx, keluar]) | Ini menghasilkan sampel dari distribusi eksponensial. |
gamma ([alpha, beta, shape, dtype, ctx, out]) | Ini menghasilkan sampel acak dari distribusi gamma. |
multinomial (data [, shape, get_prob, out, dtype]) | Ini menghasilkan pengambilan sampel bersamaan dari beberapa distribusi multinomial. |
binomial_ negatif ([k, p, bentuk, tipe d, ctx, keluar]) | Ini menghasilkan sampel acak dari distribusi binomial negatif. |
generalized_negative_binomial ([mu, alpha,…]) | Ini menghasilkan sampel acak dari distribusi binomial negatif umum. |
acak (data, ** kwargs) | Ini mengocok elemen secara acak. |
randint (rendah, tinggi [, bentuk, tipe, ctx, keluar]) | Ini menghasilkan sampel acak dari distribusi seragam diskrit. |
exponential_like ([data, lam, out, name]) | Ini menghasilkan sampel acak dari distribusi eksponensial sesuai dengan bentuk larik input. |
gamma_like ([data, alpha, beta, out, name]) | Ini menghasilkan sampel acak dari distribusi gamma sesuai dengan bentuk larik masukan. |
generalized_negative_binomial_like ([data,…]) | Ini menghasilkan sampel acak dari distribusi binomial negatif umum, sesuai dengan bentuk larik masukan. |
negative_binomial_like ([data, k, p, out, name]) | Ini menghasilkan sampel acak dari distribusi binomial negatif, sesuai dengan bentuk larik masukan. |
normal_like ([data, loc, scale, out, name]) | Ini menghasilkan sampel acak dari distribusi normal (Gaussian), sesuai dengan bentuk larik masukan. |
poisson_like ([data, lam, out, name]) | Ini menghasilkan sampel acak dari distribusi Poisson, sesuai dengan bentuk larik masukan. |
uniform_like ([data, low, high, out, name]) | Ini menghasilkan sampel acak dari distribusi seragam, sesuai dengan bentuk larik masukan. |
Contoh Implementasi
Dalam contoh di bawah ini, kita akan menarik sampel acak dari distribusi seragam. Untuk ini akan menggunakan fungsi tersebutuniform().
mx.nd.random.uniform(0, 1)
Output
Outputnya disebutkan di bawah ini -
[0.12381998]
<NDArray 1 @cpu(0)>
Example
mx.nd.random.uniform(-1, 1, shape=(2,))
Output
Outputnya diberikan di bawah ini -
[0.558102 0.69601643]
<NDArray 2 @cpu(0)>
Example
low = mx.nd.array([1,2,3])
high = mx.nd.array([2,3,4])
mx.nd.random.uniform(low, high, shape=2)
Output
Anda akan melihat output berikut -
[[1.8649333 1.8073189]
[2.4113967 2.5691009]
[3.1399727 3.4071832]]
<NDArray 3x2 @cpu(0)>
Dalam contoh di bawah ini, kita akan menarik sampel acak dari distribusi binomial negatif umum. Untuk ini, kami akan menggunakan fungsinyageneralized_negative_binomial().
mx.nd.random.generalized_negative_binomial(10, 0.5)
Output
Ketika Anda menjalankan kode di atas, Anda akan melihat output berikut -
[1.]
<NDArray 1 @cpu(0)>
Example
mx.nd.random.generalized_negative_binomial(10, 0.5, shape=(2,))
Output
Output diberikan bersama ini -
[16. 23.]
<NDArray 2 @cpu(0)>
Example
mu = mx.nd.array([1,2,3])
alpha = mx.nd.array([0.2,0.4,0.6])
mx.nd.random.generalized_negative_binomial(mu, alpha, shape=2)
Output
Diberikan di bawah ini adalah output dari kode -
[[0. 0.]
[4. 1.]
[9. 3.]]
<NDArray 3x2 @cpu(0)>
ndarray.utils
Utilitas NDArray API didefinisikan dalam paket ndarray.utils. Seperti namanya, ini menyediakan fungsi utilitas untuk NDArray dan BaseSparseNDArray.
Fungsi dan parameternya
Berikut adalah beberapa fungsi penting dan parameternya yang dicakup oleh mxnet.ndarray.utils API -
Fungsi dan Parameternya | Definisi |
---|---|
nol (bentuk [, ctx, dtype, stype]) | Fungsi ini akan mengembalikan larik baru dengan bentuk dan tipe tertentu, diisi dengan nol. |
kosong (bentuk [, ctx, dtype, stype]) | Ini akan mengembalikan larik baru dengan bentuk dan tipe yang diberikan, tanpa menginisialisasi entri. |
larik (larik_sumber [, ctx, dtype]) | Sesuai namanya, fungsi ini akan membuat array dari objek apa pun yang mengekspos antarmuka array. |
memuat (fname) | Ini akan memuat array dari file. |
load_frombuffer (buf) | Sesuai namanya, fungsi ini akan memuat kamus atau daftar array dari buffer |
simpan (fname, data) | Fungsi ini akan menyimpan daftar array atau dikt dari str-> array ke file. |
Contoh Implementasi
Pada contoh di bawah ini, kita akan mengembalikan array baru dengan bentuk dan tipe tertentu, diisi dengan nol. Untuk ini, kami akan menggunakan fungsinyazeros().
mx.nd.zeros((1,2), mx.cpu(), stype='csr')
Output
Ini menghasilkan keluaran berikut -
<CSRNDArray 1x2 @cpu(0)>
Example
mx.nd.zeros((1,2), mx.cpu(), 'float16', stype='row_sparse').asnumpy()
Output
Anda akan menerima output berikut -
array([[0., 0.]], dtype=float16)
Pada contoh di bawah ini, kita akan menyimpan daftar array dan kamus string. Untuk ini, kami akan menggunakan fungsinyasave().
Example
x = mx.nd.zeros((2,3))
y = mx.nd.ones((1,4))
mx.nd.save('list', [x,y])
mx.nd.save('dict', {'x':x, 'y':y})
mx.nd.load('list')
Output
Setelah dieksekusi, Anda akan menerima output berikut -
[
[[0. 0. 0.]
[0. 0. 0.]]
<NDArray 2x3 @cpu(0)>,
[[1. 1. 1. 1.]]
<NDArray 1x4 @cpu(0)>]
Example
mx.nd.load('my_dict')
Output
Outputnya ditunjukkan di bawah ini -
{'x':
[[0. 0. 0.]
[0. 0. 0.]]
<NDArray 2x3 @cpu(0)>, 'y':
[[1. 1. 1. 1.]]
<NDArray 1x4 @cpu(0)>}