การปูกระเบื้อง Theano เทนเซอร์

ฉันมีเทนเซอร์สองตัว A และ B โดยอันแรกมีขนาด (500,10) และอันที่สองมีขนาด (500) ฉันต้องการค้นหา A / B ฉันใช้ตัวดำเนินการปกติ / และคอมไพเลอร์ Theano บอกว่าควรมีขนาดเท่ากัน จากนั้นฉันลองใช้ tensor.tile บน B เพื่อให้มีขนาดเท่ากับ A โดยมีพารามิเตอร์สามตัว (x, reps, ndim) ฉันลองใช้ค่าที่แตกต่างกันและฉันถูกจำกัดตามข้อจำกัดเหล่านี้: x.ndim = len(reps) และ ndim = len(reps) ถ้าอย่างนั้นเมื่อมีข้อจำกัดเหล่านี้ ฉันจะจัดเรียงอาร์เรย์ให้เป็นเมทริกซ์ได้อย่างไร! นี่เป็นจุดบกพร่องใน Theano หรือไม่?


person iBM    schedule 23.12.2014    source แหล่งที่มา


คำตอบ (1)


คุณสามารถออกอากาศได้และมีหลายวิธีในการดำเนินการ ยกตัวอย่างต่อไปนี้

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)

วิธีที่ไม่ปลอดภัยในการทำเช่นนี้คือการเพิ่มแกนที่เหมาะสม

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

อีกวิธีหนึ่งคือการใช้ประโยชน์จากความจริงที่ว่ามีการออกอากาศโดยนัยเพื่อวางแกนแรกหากขาดหายไป

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

เพื่อแสดงว่าสิ่งเหล่านี้คำนวณสิ่งเดียวกัน เราใช้ 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