Sto lavorando alla reimplementazione di this paper e l'operazione di chiave è un prodotto di tensione bilineare. Non so cosa significhi, ma la carta ha una bella grafica, che capisco.Prodotto tensore bilineare in TensorFlow
il funzionamento dei tasti è E_1 * W * E_2, e voglio sapere come implementarlo in tensorflow, perché il resto dovrebbe essere facile.
Fondamentalmente, in 3D tensore W, fetta in matrici, e per la fetta j'th (matrice), moltiplicarlo su ciascun lato E_1 e E_2, causando uno scalare, che è il jth voce nel vettore risultante (l'output di questa operazione).
Così voglio eseguire un prodotto di E_1, un d-dimensionale vettore, W, d x D x k tensore e E_2, un'altra d-dimensionale vettore. Potrebbe questo prodotto essere espresso in modo conciso in TensorFlow come lo è ora, o dovrei definire il mio op in qualche modo?
modifiche PRIMA
Perché non moltiplicare questi tensori lavoro, e c'è qualche modo per definire più esplicitamente in modo che funzioni?
>>> import tensorflow as tf
>>> tf.InteractiveSession()
>>> a = tf.ones([3, 3, 3])
>>> a.eval()
array([[[ 1., 1., 1.],
[ 1., 1., 1.],
[ 1., 1., 1.]],
[[ 1., 1., 1.],
[ 1., 1., 1.],
[ 1., 1., 1.]],
[[ 1., 1., 1.],
[ 1., 1., 1.],
[ 1., 1., 1.]]], dtype=float32)
>>> b = tf.ones([3, 1, 1])
>>> b.eval()
array([[[ 1.]],
[[ 1.]],
[[ 1.]]], dtype=float32)
>>>
Il messaggio di errore è
ValueError: Shapes TensorShape([Dimension(3), Dimension(3), Dimension(3)]) and TensorShape([Dimension(None), Dimension(None)]) must have the same rank
ATTUALMENTE
scopre che moltiplicare due tensori 3D non funziona neanche con tf.matmul
, così, ma tf.batch_matmul
fa. tf.batch_matmul
eseguirà anche tensori e matrici 3D. Poi ho provato 3D e un vettore:
ValueError: Dimensions Dimension(3) and Dimension(1) are not compatible
è possibile farlo con una semplice rimodella. – mdaoust
Hai finito per implementare la carta? – Apurv