Kaique Santos
Kaique Santos

Reputation: 49

MatMul rank error when trying to convert math operations

I have a script and I am trying to convert my math operations from NumPy operations to TensorFlow operations so it can get faster on GPU. And in my script I end up in a situation that I have an array with shape (260) and need to do matrix multiplication with another array with shape (260), illustrated by:

import numpy as np

x = np.array([2] * 260)
y = np.array([4] * 260)
r = np.matmul(x,y) #np.dot(x,y) also works
print(r) #2080

But the same operation in TensorFlow is not possible.

import tensorflow as tf

x = tf.Variable([2] * 260)
y = tf.Variable([4] * 260)
r = tf.matmul(x,y)

init = tf.initialize_all_variables()
sess = tf.Session()

sess.run(init)
result = sess.run(r)
print(result) # ERRROR

The TensorFlow error says:

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

I have tried to reshape the inputs countless many ways, and none of those have worked, such as: x = tf.expand_dims(x,1).

Upvotes: 0

Views: 311

Answers (1)

fuglede
fuglede

Reputation: 18221

Since both inputs are 1-dimensional, your matrix multiplication is the inner product,

tf.reduce_sum(tf.multiply(x, y))

or

tf.tensordot(x, y, 1)

Also see this answer for a few alternative ways of calculating the inner product.

Upvotes: 2

Related Questions