Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Tensor multiplication in Tensorflow

I am trying to carry out tensor multiplication in NumPy/Tensorflow.

I have 3 tensors- A (M X h), B (h X N X s), C (s X T).

I believe that A X B X C should produce a tensor D (M X N X T).

Here's the code (using both numpy and tensorflow).

M = 5
N = 2
T = 3
h = 2
s = 3
A_np = np.random.randn(M, h)
C_np = np.random.randn(s, T)
B_np = np.random.randn(h, N, s)

A_tf = tf.Variable(A_np)
C_tf = tf.Variable(C_np)
B_tf = tf.Variable(B_np)

# Tensorflow
with tf.Session() as sess:
    sess.run(tf.global_variables_initializer())
    print sess.run(A_tf)
    p = tf.matmul(A_tf, B_tf)
    sess.run(p)

This returns the following error:

ValueError: Shape must be rank 2 but is rank 3 for 'MatMul_2' (op: 'MatMul') with input shapes: [5,2], [2,2,3].

If we try the multiplication only with numpy matrices, we get the following errors:

np.multiply(A_np, B_np)

ValueError: operands could not be broadcast together with shapes (5,2) (2,2,3)

However, we can use np.tensordot as follows:

np.tensordot(np.tensordot(A_np, B_np, axes=1), C_np, axes=1)

Is there an equivalent operation in TensorFlow?

Answer

In numpy, we would do as follows:

ABC_np = np.tensordot(np.tensordot(A_np, B_np, axes=1), C_np, axes=1)

In tensorflow, we would do as follows:

AB_tf = tf.tensordot(A_tf, B_tf,axes = [[1], [0]])
AB_tf_C_tf = tf.tensordot(AB_tf, C_tf, axes=[[2], [0]])

with tf.Session() as sess:
    sess.run(tf.global_variables_initializer())
    ABC_tf = sess.run(AB_tf_C_tf)

np.allclose(ABC_np, ABC_tf) return True.

like image 378
Nipun Batra Avatar asked Mar 28 '17 10:03

Nipun Batra


People also ask

How do you multiply a tensor?

mul() method is used to perform element-wise multiplication on tensors in PyTorch. It multiplies the corresponding elements of the tensors. We can multiply two or more tensors. We can also multiply scalar and tensors.

Which method do we use to multiply two variables with TensorFlow?

The 'multiply' function in Tensorflow is used to multiply the values element−wise in the matrix.

Which operator is used to perform matrix multiplication in TensorFlow?

To perform element-wise multiplication, you should use the tf. multiply() method. To perform matrix multiplication, you should use the tf. matmul() method.


1 Answers

Try

tf.tensordot(A_tf, B_tf,axes = [[1], [0]])

For example:

x=tf.tensordot(A_tf, B_tf,axes = [[1], [0]])
x.get_shape()
TensorShape([Dimension(5), Dimension(2), Dimension(3)])

Here is tensordot documentation, and here is the relevant github repository.

like image 84
Miriam Farber Avatar answered Sep 30 '22 06:09

Miriam Farber