iki vektör v
ve w
ve onları bu şekilde dışında bir matris m
olmak için: Diğer bir deyişleGereksiz boyutlarda boyut kaybı olmadan tensörler için dış ürün nasıl uygulanır?
m[i, j] = v[i] * w[j]
I dış ürün bunların hesaplamak istiyoruz. Bunu theano.tensor.outer
kullanarak veya v
ve v
'a yeni dizinler ekleyerek ve dot
ürününü kullanarak yapabilirim.
m = T.dot(v[:,numpy.newaxis], w[numpy.newaxis,:])
Şimdi biraz daha genel bir sorunu çözmeye çalışıyorum. Iki vektör yerine v
ve w
Ben iki matrisler (Ben onlarıve w
olarak adlandırıyorum) matris v
matris w
(birinci satırdaki i_th satır karşılık gelen satırı ile her satırın bir dış ürün hesaplamak istiyorum) ikinci matrisin i_th satırı ile çarpılır). Yani, böyle bir şey yapmak istiyorum:
m1 = T.tensordot(v[:,:, numpy.newaxis], w[:,:,numpy.newaxis], axes = [[2],[2]])
m[i, j, k] = m1[i, k, j, k]
, m[:,:,k]
matrisin v
ve matrisin w
ait k_th
satırdan k_th
sıranın dış ürüne tekabül matristir.
Yukarıdaki "çözüm" ile ilgili iki sorun görüyorum. İlk olarak, bu gerçekten bir çözüm değildir, çünkü kodun ikinci satırı uygun bir teano kodu değildir. Yani, ilk sorum, bazı dizinlerin eşit olmasını zorlayarak bu "gelişmiş dilimleme" yi nasıl yapacağız. Örneğin m[i, k] = a[i, k, i, i, k]
. İkincisi, ilk olarak iki 2D tensörden bir 4D tesnor (m1
) oluşturduğumu ve daha sonra bir 3D tensörüne indirgemeyi sevmiyorum. Çok hafıza tüketen olabilir. Sanırım bundan kurtulabiliriz.
Mükemmel bir DSL uygulaması ... bu durumda Einstein notasyonu/toplama kuralı :) –