ValueError when performing matmul with Tensorflow

后端 未结 1 1849
盖世英雄少女心
盖世英雄少女心 2020-12-15 19:48

I\'m a total beginner to TensorFlow, and I\'m trying to multiply two matrices together, but I keep getting an exception that says:



        
相关标签:
1条回答
  • 2020-12-15 20:30

    The tf.matmul() op requires that both of its inputs are matrices (i.e. 2-D tensors)*, and doesn't perform any automatic conversion. Your T1 variable is a matrix, but your x placeholder is a length-2 vector (i.e. a 1-D tensor), which is the source of the error.

    By contrast, the * operator (an alias for tf.multiply()) is a broadcasting element-wise multiplication. It will convert the vector argument to a matrix by following NumPy broadcasting rules.

    To make your matrix multiplication work, you can either require that x is a matrix:

    data = np.array([[0.1], [0.2]])
    x = tf.placeholder(tf.float32, shape=[2, 1])
    T1 = tf.Variable(tf.ones([2, 2]))
    l1 = tf.matmul(T1, x)
    init = tf.initialize_all_variables()
    
    with tf.Session() as sess:
        sess.run(init)
        sess.run(l1, feed_dict={x: data})
    

    ...or you could use the tf.expand_dims() op to convert the vector to a matrix:

    data = np.array([0.1, 0.2])
    x = tf.placeholder(tf.float32, shape=[2])
    T1 = tf.Variable(tf.ones([2, 2]))
    l1 = tf.matmul(T1, tf.expand_dims(x, 1))
    init = tf.initialize_all_variables()
    
    with tf.Session() as sess:
        # ...
    

    * This was true when I posted the answer at first, but now tf.matmul() also supports batched matrix multiplications. This requires both arguments to have at least 2 dimensions. See the documentation for more details.

    0 讨论(0)
提交回复
热议问题