Üzgünüm, ama "kafa karıştırıcı" derken ne demek istediniz bilmiyorum?
Küçük harf kullanmayı denedim, umarım vakanı temsil edebilir. theano.tensor.dot
üç ila boyutlu tensörünü ve iki boyutlu matris kullanarak Dot-ürün:
import numpy as np
import theano
import theano.tensor as T
a = T.tensor3('a', dtype='int64')
c = T.matrix('c',dtype='int64')
d = T.dot(a,c)
g = theano.function([a,c],d)
x = np.array([[[1,2],[1,3]],[[2,2],[1,1]]], dtype=int)
y = np.array([[1,2],[1,3]], dtype=int)
print g(x,y)
çıkışı:
Bu sizin mantık gibi çalışır
[[[ 3 8]
[ 4 11]]
[[ 4 10]
[ 2 5]]]
, matris c
yalnızca ikinci ve üçüncü boyutta dot-ürünü yapmak .
GÜNCELLEME
yukarıdaki ilk kod, kendi halinde birinci operasyonda (A * B) için kullanabileceği. Maalesef dikkatlice hesaplamıyorum, tabiki bu operasyondan sonra çıktı üç boyutlu tensör haline geldi. Yani, (AW) * B'yi gerçekleştirmek için farklı bir yaklaşım kullanmalısınız. Genellikle taramayı kullanarak iki üç boyutlu tensörlerle arasındaki çarpma işlemini gerçekleştirmek için:
import numpy as np
import theano
import theano.tensor as T
a = T.tensor3('a', dtype='int64')
c = T.tensor3('c',dtype='int64')
d, b = theano.scan(lambda i: T.dot(a[i,:], c[i,:]),sequences=T.arange(2))
g = theano.function([a,c],d)
x = np.array([[[1,2],[1,3]],[[2,2],[1,1]]], dtype=int)
y = np.array([[[1,2],[1,3]],[[2,2],[1,1]]], dtype=int)
print g(x,y)
ama ben theano.tensor.batched_dot
(theano.tensor.dot
sadece 2D ve 1D dizisi için düşünüyorum) kullanarak başka bir yaklaşım olduğunu biliyoruz. Senin durumunda böyle kodlamak için basit:
e = T.batched_dot(a,c)
g = theano.function([a,c],e)
kod yukarıdaki aynı sonuçları verir. Umarım yardımcı olur.
Merhaba Malioboro! Bunu da yapabildim! Sorun ikinci çarpma ile geliyor. Soru, üç yönlü bir çarpma, iki değil ister. A ve W ile (A * W) ve (B) sayılarını (A * W * B) elde etmek için çarpmamız gerekiyor. Bu almıyorum A * W * B adımı. Cevabınızda (A * W) * B'ye ulaştığınız A * W'den nasıl geçeceğiz? Teşekkürler! – Sahil
oh Üzgün @Sahil, boyutu yanlış hesapladım, cevabımı güncelledim – malioboro
Merhaba Malioboro, Yukarıdaki örnekte, 3D tensörü bir matris nokta çarpısıyla çarpmak istiyorum. C = T. matris ('c'), y = np.array ([[1,2], [3,4]]) 'gibi. Tarama fonksiyonunu kullanarak döngü yapmak iyidir. Ancak T.batched_dot (a, c) kullanılarak, ValueError: get_scalar_constant_value saptanan determinist IndexError: 'gibi bir hatayla doğru değer verilir. Yardım edebilir misin ? – Shyamkkhadka