Why tf.transpose(W))

in the below code, why tf.transpose(W))

def cofi_cost_func_v(X, W, b, Y, R, lambda_):
    Returns the cost for the content-based filtering
    Vectorized for speed. Uses tensorflow operations to be compatible with custom training loop.
      X (ndarray (num_movies,num_features)): matrix of item features
      W (ndarray (num_users,num_features)) : matrix of user parameters
      b (ndarray (1, num_users)            : vector of user parameters
      Y (ndarray (num_movies,num_users)    : matrix of user ratings of movies
      R (ndarray (num_movies,num_users)    : matrix, where R(i, j) = 1 if the i-th movies was rated by the j-th user
      lambda_ (float): regularization parameter
      J (float) : Cost
    j = (tf.linalg.matmul(X, tf.transpose(W)) + b - Y)*R
    J = 0.5 * tf.reduce_sum(j**2) + (lambda_/2) * (tf.reduce_sum(X**2) + tf.reduce_sum(W**2))
    return J

It is used to make the dimensions valid for the matmul operation.

You might want to remove tf.transpose and see what happens. Also take a look at the dimensions:

There’s no standard on the organization (rows vs. columns) for a weight matrix. You may have to use a transposition for the matrix algebra to work.