Memasang tensor Theano

Saya memiliki dua tensor A dan B yang pertama berukuran (500,10) dan yang kedua berukuran (500). Saya ingin mencari A/B. Saya menggunakan operator/biasa dan kompiler Theano mengatakan bahwa ukurannya harus sama. Kemudian saya mencoba menggunakan tensor.tile di B agar ukurannya sama dengan A. Ini memiliki tiga parameter (x, reps, ndim). Saya mencoba nilai yang berbeda dan saya terbatas pada batasan ini: x.ndim = len(reps) dan ndim = len(reps) Lalu dengan batasan ini bagaimana saya bisa menyusun array ke matriks?! Apakah ini bug di Theano?


person iBM    schedule 23.12.2014    source sumber


Jawaban (1)


Anda tinggal menyiarkannya saja, dan ada beberapa cara untuk melakukannya. Ambil contoh berikut

import numpy as np
A = np.arange(1., 5001., 1.).reshape(500, 10)
B = np.arange(1., 501., 1.)

import theano
As = theano.shared(A)
Bs = theano.shared(B)

Cara yang aman untuk melakukan ini adalah menambahkan sumbu yang sesuai

AoverB = A / B[:, np.newaxis]
AoverBalso = A / B.reshape((-1, 1))
AsoverBs = As / Bs.reshape((-1, 1))

Cara lain adalah dengan mengeksploitasi fakta bahwa ada siaran implisit untuk mengisi sumbu pertama jika sumbu tersebut hilang

AoverBT = A.T / B.T   # no axis was added here
AsoverBsT = As.T / Bs.T

Untuk menunjukkan bahwa semua perhitungan ini sama, kita menggunakan numpy.testing

from numpy.testing import assert_array_equal
assert_array_equal(AoverB, AoverBalso)
assert_array_equal(AoverB, AsoverBs.eval())
assert_array_equal(AoverB, AoverBT.T)
assert_array_equal(AoverB, AsoverBsT.T.eval())
person eickenberg    schedule 26.12.2014