tf.contrib.keras.backend.dot() or tf.matmul()? Matrix Multiplication with Different Rank – TensorFlow Tutorial

By | February 18, 2021

When we are multiplying two matrices with different ranks, we may get this error: ValueError: Shape must be rank 2 but is rank 3. In this tutorial, we will introduce how to multiply two matrices with different ranks in tensorflow.

tf.matmul()

TensorFlow tf.matmul() can multiply matrix. However, it may report ValueError when multiplying two matrices with different ranks. Here is an tutorial:

Fix tf.matmul() ValueError: Shape must be rank 2 but is rank 3 for ‘MatMul’ – TensorFlow Tutorial

tf.contrib.keras.backend.dot()

tf.contrib.keras.backend.dot() is a good choice to multiply matrix with different rank. Here is an example:

import tensorflow as tf
import numpy as np
t3 = tf.Variable(np.array([[200, 4, 5], [20, 5, 70],[2, 3, 5], [5, 5, 7]]), dtype = tf.float32)
w = tf.Variable(tf.random_uniform([3,3], -0.01, 0.01))
t3 = tf.reshape(t3, [2,2,3])
wx =  tf.contrib.keras.backend.dot(t3, w)

init = tf.global_variables_initializer() 
init_local = tf.local_variables_initializer()
with tf.Session() as sess:
    sess.run([init, init_local])
    print(sess.run([wx]))

Here \(t3\) is 2 * 2 *3, rank is 3. \(w\) is 3* 3, rank is 2.

Run this code, you may get this result:

[array([[[ 1.6675205e+00,  1.4983379e+00, -2.1119225e-01],
        [-8.9924693e-02, -5.1424092e-01, -2.8229352e-02]],

       [[ 2.1686245e-02, -1.6539715e-02, -1.1580679e-02],
        [ 5.5628203e-02, -1.5962720e-03, -2.1116760e-02]]], dtype=float32)]

We run this code in tensorflow 1.10. However, if you replace tf.contrib.keras.backend.dot() with tf.matmul(), you will get a ValueError.