Apache MXNet - Simbol API Python
Pada bab ini, kita akan mempelajari tentang antarmuka di MXNet yang disebut sebagai Simbol.
Mxnet.ndarray
Symbol API Apache MXNet adalah antarmuka untuk pemrograman simbolik. Symbol API menampilkan penggunaan berikut ini -
Grafik komputasi
Mengurangi penggunaan memori
Optimalisasi fungsi pra-penggunaan
Contoh yang diberikan di bawah ini menunjukkan bagaimana seseorang dapat membuat ekspresi sederhana dengan menggunakan API Simbol MXNet -
Sebuah NDArray dengan menggunakan 1-D dan 2-D 'array' dari daftar Python biasa -
import mxnet as mx
# Two placeholders namely x and y will be created with mx.sym.variable
x = mx.sym.Variable('x')
y = mx.sym.Variable('y')
# The symbol here is constructed using the plus ‘+’ operator.
z = x + y
Output
Anda akan melihat output berikut -
<Symbol _plus0>
Example
(x, y, z)
Output
Outputnya diberikan di bawah ini -
(<Symbol x>, <Symbol y>, <Symbol _plus0>)
Sekarang mari kita bahas secara detail tentang kelas, fungsi, dan parameter dari ndarray API MXNet.
Kelas
Tabel berikut terdiri dari kelas Symbol API MXNet -
Kelas | Definisi |
---|---|
Simbol (pegangan) | Kelas yaitu simbol adalah grafik simbolis dari Apache MXNet. |
Fungsi dan parameternya
Berikut adalah beberapa fungsi penting dan parameternya yang dicakup oleh mxnet. Symbol API -
Fungsi dan Parameternya | Definisi |
---|---|
Aktivasi ([data, act_type, out, name]) | Ini menerapkan elemen fungsi aktivasi ke input. Ini mendukungrelu, sigmoid, tanh, softrelu, softsign fungsi aktivasi. |
BatchNorm ([data, gamma, beta, moving_mean,…]) | Ini digunakan untuk normalisasi batch. Fungsi ini menormalkan kumpulan data dengan mean dan varians. Ini menerapkan skalagamma 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 akumulasi gradien input agar tidak mengalir melalui operator ini ke arah belakang. |
cast ([data, dtype, out, name]) | Fungsi ini akan mentransmisikan semua elemen masukan ke tipe baru. |
Fungsi ini akan mentransmisikan semua elemen masukan ke tipe baru. | Fungsi ini, seperti yang ditentukan namanya, mengembalikan simbol baru dari bentuk dan tipe tertentu, diisi dengan nol. |
satu (bentuk [, tipe dt]) | Fungsi ini, seperti nama yang ditentukan mengembalikan simbol baru dari bentuk dan tipe tertentu, diisi dengan satu. |
full (shape, val [, dtype]) | Fungsi ini, seperti nama yang ditentukan mengembalikan larik baru dengan bentuk dan tipe tertentu, diisi dengan nilai yang diberikan val. |
arange (mulai [, berhenti, langkah, ulangi,…]) | Ini akan mengembalikan nilai yang berjarak sama dalam interval tertentu. Nilai-nilai dihasilkan dalam interval setengah terbuka [start, stop) yang berarti bahwa interval termasukstart tapi tidak termasuk stop. |
linspace (mulai, berhenti, num [, titik akhir, nama,…]) | Ini akan mengembalikan angka yang berjarak sama dalam interval tertentu. Mirip dengan fungsi mengatur (), nilai-nilai dihasilkan dalam interval setengah terbuka [mulai, berhenti) yang berarti bahwa intervalnya termasukstart tapi tidak termasuk stop. |
histogram (a [, bins, range]) | Sesuai dengan namanya, fungsi ini akan menghitung histogram dari data masukan. |
daya (basis, exp) | Sesuai namanya, fungsi ini akan mengembalikan hasil dari segi elemen base elemen yang dinaikkan menjadi kekuatan dari expelemen. Kedua input yaitu base dan exp, dapat berupa Simbol atau skalar. Di sini perhatikan bahwa penyiaran tidak diperbolehkan. Kamu bisa memakaibroadcast_pow jika Anda ingin menggunakan fitur siaran. |
SoftmaxActivation ([data, mode, nama, attr, out]) | Fungsi ini menerapkan aktivasi softmax ke input. Ini ditujukan untuk lapisan internal. Ini sebenarnya sudah usang, bisa kita gunakansoftmax() sebagai gantinya. |
Contoh Implementasi
Pada contoh di bawah ini kita akan menggunakan fungsi tersebut power() yang akan mengembalikan hasil elemen-bijaksana dari elemen dasar yang dinaikkan ke pangkat dari elemen exp:
import mxnet as mx
mx.sym.power(3, 5)
Output
Anda akan melihat output berikut -
243
Example
x = mx.sym.Variable('x')
y = mx.sym.Variable('y')
z = mx.sym.power(x, 3)
z.eval(x=mx.nd.array([1,2]))[0].asnumpy()
Output
Ini menghasilkan keluaran berikut -
array([1., 8.], dtype=float32)
Example
z = mx.sym.power(4, y)
z.eval(y=mx.nd.array([2,3]))[0].asnumpy()
Output
Ketika Anda menjalankan kode di atas, Anda akan melihat output berikut -
array([16., 64.], dtype=float32)
Example
z = mx.sym.power(x, y)
z.eval(x=mx.nd.array([4,5]), y=mx.nd.array([2,3]))[0].asnumpy()
Output
Outputnya disebutkan di bawah ini -
array([ 16., 125.], dtype=float32)
Dalam contoh yang diberikan di bawah ini, kami akan menggunakan fungsi tersebut SoftmaxActivation() (or softmax()) yang akan diterapkan ke masukan dan ditujukan untuk lapisan internal.
input_data = mx.nd.array([[2., 0.9, -0.5, 4., 8.], [4., -.7, 9., 2., 0.9]])
soft_max_act = mx.nd.softmax(input_data)
print (soft_max_act.asnumpy())
Output
Anda akan melihat output berikut -
[[2.4258138e-03 8.0748333e-04 1.9912292e-04 1.7924475e-02 9.7864312e-01]
[6.6843745e-03 6.0796250e-05 9.9204916e-01 9.0463174e-04 3.0112563e-04]]
symbol.contrib
Contrib NDArray API didefinisikan dalam paket symbol.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.symbol.contrib API -
Fungsi dan 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) | Seperti namanya, fungsi ini menjalankan loop 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, then_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. |
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 dikuantisasi dalam int32 dan ambang batas yang sesuai, menjadi int8 menggunakan ambang batas minimum dan maksimum baik yang dihitung pada saat runtime atau dari kalibrasi. |
index_copy ([sensor_ lama, index_vector,…]) | Fungsi ini menyalin elemen a new_tensor into the old_tensor by selecting the indices in the order given in index. The output of this operator will be a new tensor that contains the rest elements of old tensor and the copied elements of new tensor. |
interleaved_matmul_encdec_qk ([kueri,…]) | Operator ini menghitung perkalian matriks antara proyeksi kueri dan kunci dalam penggunaan perhatian multi-kepala sebagai encoder-decoder. Syaratnya adalah bahwa input harus berupa tensor proyeksi kueri yang mengikuti tata letak: (seq_length, batch_size, num_heads *, head_dim). |
Contoh Implementasi
Pada contoh di bawah ini kita akan menggunakan fungsi rand_zipfian untuk menggambar sampel acak dari sekitar distribusi Zipfian -
import mxnet as mx
true_cls = mx.sym.Variable('true_cls')
samples, exp_count_true, exp_count_sample = mx.sym.contrib.rand_zipfian(true_cls, 5, 6)
samples.eval(true_cls=mx.nd.array([3]))[0].asnumpy()
Output
Anda akan melihat output berikut -
array([4, 0, 2, 1, 5], dtype=int64)
Example
exp_count_true.eval(true_cls=mx.nd.array([3]))[0].asnumpy()
Output
Outputnya disebutkan di bawah ini -
array([0.57336551])
Example
exp_count_sample.eval(true_cls=mx.nd.array([3]))[0].asnumpy()
Output
Anda akan melihat output berikut -
array([1.78103594, 0.46847373, 1.04183923, 0.57336551, 1.04183923])
Pada contoh di bawah ini kita 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_vars = (mx.sym.var('i'), mx.sym.var('s'))
outputs, states = mx.sym.contrib.while_loop(cond, func, loop_vars, max_iterations=10)
print(outputs)
Output
Outputnya diberikan di bawah ini:
[<Symbol _while_loop0>]
Example
Print(States)
Output
Ini menghasilkan keluaran berikut -
[<Symbol _while_loop0>, <Symbol _while_loop0>]
Pada contoh di bawah ini kita akan menggunakan fungsi tersebut index_copy yang menyalin elemen new_tensor ke old_tensor.
import mxnet as mx
a = mx.nd.zeros((6,3))
b = mx.nd.array([[1,2,3],[4,5,6],[7,8,9]])
index = mx.nd.array([0,4,2])
mx.nd.contrib.index_copy(a, index, b)
Output
Ketika Anda menjalankan kode di atas, Anda akan melihat output berikut -
[[1. 2. 3.]
[0. 0. 0.]
[7. 8. 9.]
[0. 0. 0.]
[4. 5. 6.]
[0. 0. 0.]]
<NDArray 6x3 @cpu(0)>
symbol.image
Image Symbol API didefinisikan dalam paket symbol.image. Sesuai namanya, biasanya digunakan untuk gambar dan fiturnya.
Fungsi dan parameternya
Berikut adalah beberapa fungsi penting dan parameternya yang dicakup oleh mxnet.symbol.image API -
Fungsi dan Parameternya | Definisi |
---|---|
Adjust_lighting ([data, alpha, out, name]) | Sesuai namanya, fungsi ini mengatur tingkat pencahayaan dari input. Ini mengikuti gaya AlexNet. |
pangkas ([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. |
menormalkan ([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 hasilnya jikasrc lebih kecil dari size. |
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, yrange,…]) | 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 hasil jika src lebih kecil dari ukurannya. Ini akan mengacak area dan aspek rasio juga. |
ubah ukuran ([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, out, name]) | 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.sym.random.uniform(0, 255, (4, 2, 3)).astype(dtype=np.uint8)
mx.sym.image.to_tensor(img)
Output
Outputnya dinyatakan di bawah ini -
<Symbol to_tensor4>
Example
img = mx.sym.random.uniform(0, 255, (2, 4, 2, 3)).astype(dtype=np.uint8)
mx.sym.image.to_tensor(img)
Output
Outputnya disebutkan di bawah ini:
<Symbol to_tensor5>
Pada contoh di bawah ini, kita akan menggunakan fungsi 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.sym.random.uniform(0, 1, (3, 4, 2))
mx.sym.image.normalize(img, mean=(0, 1, 2), std=(3, 2, 1))
Output
Diberikan di bawah ini adalah output dari kode -
<Symbol normalize0>
Example
img = mx.sym.random.uniform(0, 1, (2, 3, 4, 2))
mx.sym.image.normalize(img, mean=(0, 1, 2), std=(3, 2, 1))
Output
Outputnya ditunjukkan di bawah ini -
<Symbol normalize1>
symbol.random
API Simbol Acak didefinisikan dalam paket symbol.random. Seperti namanya, ini adalah API Simbol generator distribusi acak dari MXNet.
Fungsi dan parameternya
Berikut adalah beberapa fungsi penting dan parameternya yang dicakup oleh mxnet.symbol.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). |
poisson ([lam, shape, dtype, ctx, out]) | Ini menghasilkan sampel acak dari distribusi Poisson. |
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
Pada contoh di bawah ini, kita akan mengacak elemen secara acak menggunakan fungsi shuffle (). Ini akan mengocok array di sepanjang sumbu pertama.
data = mx.nd.array([[0, 1, 2], [3, 4, 5], [6, 7, 8],[9,10,11]])
x = mx.sym.Variable('x')
y = mx.sym.random.shuffle(x)
y.eval(x=data)
Output
Anda akan melihat output berikut:
[
[[ 9. 10. 11.]
[ 0. 1. 2.]
[ 6. 7. 8.]
[ 3. 4. 5.]]
<NDArray 4x3 @cpu(0)>]
Example
y.eval(x=data)
Output
Ketika Anda menjalankan kode di atas, Anda akan melihat output berikut -
[
[[ 6. 7. 8.]
[ 0. 1. 2.]
[ 3. 4. 5.]
[ 9. 10. 11.]]
<NDArray 4x3 @cpu(0)>]
Dalam contoh di bawah ini, kita akan menarik sampel acak dari distribusi binomial negatif umum. Untuk ini akan menggunakan fungsi tersebutgeneralized_negative_binomial().
mx.sym.random.generalized_negative_binomial(10, 0.1)
Output
Outputnya diberikan di bawah ini -
<Symbol _random_generalized_negative_binomial0>
symbol.sparse
API Simbol Renggang didefinisikan dalam paket mxnet.symbol.sparse. Seperti yang tersirat dari namanya, ini menyediakan grafik jaringan saraf renggang dan diferensiasi otomatis pada CPU.
Fungsi dan parameternya
Berikut adalah beberapa fungsi penting (termasuk rutinitas pembuatan Simbol, rutinitas Manipulasi Simbol, Fungsi Matematika, Fungsi Trigonometri, Fungsi Hyberbolic, Fungsi Pengurangan, Pembulatan, Kekuatan, Jaringan Saraf Tiruan) dan parameternya dicakup oleh mxnet.symbol.sparse API -
Fungsi dan Parameternya | Definisi |
---|---|
ElementWiseSum (* args, ** kwargs) | Fungsi ini akan menambahkan semua elemen argumen masukan secara bijaksana. Misalnya, _ (1,2,… = 1 + 2 + ⋯ +). Di sini, kita dapat melihat bahwa add_n berpotensi lebih efisien daripada memanggil add sebanyak n kali. |
Menyematkan ([data, weight, input_dim,…]) | Ini akan memetakan indeks integer ke representasi vektor yaitu embeddings. Ini sebenarnya memetakan kata-kata ke vektor bernilai nyata dalam ruang berdimensi tinggi yang disebut embeddings kata. |
LinearRegressionOutput ([data, label,…]) | Ini menghitung dan mengoptimalkan kerugian kuadrat selama propagasi mundur yang memberikan hanya data keluaran selama propagasi maju. |
LogisticRegressionOutput ([data, label,…]) | Menerapkan fungsi logistik yang juga disebut fungsi sigmoid ke input. Fungsi tersebut dihitung sebagai 1/1 + exp (−x). |
MAERegressionOutput ([data, label,…]) | Operator ini menghitung kesalahan absolut dari input. MAE sebenarnya adalah metrik risiko yang sesuai dengan nilai yang diharapkan dari kesalahan absolut. |
abs ([data, nama, attr, out]) | Sesuai namanya, fungsi ini akan mengembalikan nilai absolut dari segi elemen dari input. |
adagrad_update ([berat badan, grad, sejarah, lr,…]) | Ini adalah fungsi pembaruan untuk AdaGrad optimizer. |
adam_update ([weight, grad, mean, var, lr,…]) | Ini adalah fungsi pembaruan untuk Adam optimizer. |
add_n (* args, ** kwargs) | Seperti namanya, ia akan menambahkan semua argumen masukan dari segi elemen. |
arccos ([data, name, attr, out]) | Fungsi ini akan mengembalikan kosinus terbalik berdasarkan elemen dari larik masukan. |
titik ([lhs, rhs, transpose_a, transpose_b,…]) | Seperti namanya, ini akan memberikan produk titik dari dua larik. Ini akan tergantung pada dimensi larik masukan: 1-D: hasil kali dalam vektor 2-D: perkalian matriks ND: Perkalian jumlah di atas sumbu terakhir masukan pertama dan sumbu pertama masukan kedua. |
elemwise_add ([lhs, rhs, name, attr, out]) | Seperti namanya itu akan add elemen argumen yang bijaksana. |
elemwise_div ([lhs, rhs, name, attr, out]) | Seperti namanya itu akan divide elemen argumen yang bijaksana. |
elemwise_mul ([lhs, rhs, name, attr, out]) | Seperti namanya itu akan Multiply elemen argumen yang bijaksana. |
elemwise_sub ([lhs, rhs, name, attr, out]) | Seperti namanya, itu akan mengurangi elemen argumen yang bijaksana. |
exp ([data, nama, attr, out]) | Fungsi ini akan mengembalikan nilai eksponensial bijak elemen dari input yang diberikan. |
sgd_update ([berat, grad, lr, wd,…]) | Ini bertindak sebagai fungsi pembaruan untuk pengoptimal Stochastic Gradient Descent. |
sigmoid ([data, nama, attr, out]) | Seperti namanya itu akan menghitung sigmoid dari x elemen bijaksana. |
tanda ([data, nama, attr, out]) | Ini akan mengembalikan tanda bijak elemen dari masukan yang diberikan. |
sin ([data, nama, attr, out]) | Seperti namanya, fungsi ini akan menghitung sinus bijak elemen dari larik masukan yang diberikan. |
Contoh Implementasi
Pada contoh di bawah ini, kita akan mengacak elemen secara acak menggunakan ElementWiseSum()fungsi. Ini akan memetakan indeks integer ke representasi vektor yaitu embeddings kata.
input_dim = 4
output_dim = 5
Example
/* Here every row in weight matrix y represents a word. So, y = (w0,w1,w2,w3)
y = [[ 0., 1., 2., 3., 4.],
[ 5., 6., 7., 8., 9.],
[ 10., 11., 12., 13., 14.],
[ 15., 16., 17., 18., 19.]]
/* Here input array x represents n-grams(2-gram). So, x = [(w1,w3), (w0,w2)]
x = [[ 1., 3.],
[ 0., 2.]]
/* Now, Mapped input x to its vector representation y.
Embedding(x, y, 4, 5) = [[[ 5., 6., 7., 8., 9.],
[ 15., 16., 17., 18., 19.]],
[[ 0., 1., 2., 3., 4.],
[ 10., 11., 12., 13., 14.]]]