所以,我想将矩阵与矩阵相乘。当我尝试使用矩阵的数组时,它可以工作:
import tensorflow as tf
x = tf.placeholder(tf.float32, [None, 3])
W = tf.Variable(tf.ones([3, 3]))
y = tf.matmul(x, W)
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
curr_y = sess.run(y, feed_dict={x: [[1,2,3],[0,4,5]]})
print curr_y
因此数组的批量大小为2,形状为3x1。所以我可以将矩阵与形状3x3乘以阵列3x1。 但是当我再次得到一个形状为3x3的矩阵,但这次是矩阵而不是形状为3x2的数组,批量大小为2,它不起作用。
但是如果我尝试将矩阵与矩阵相乘。它没有用。
import tensorflow as tf
x = tf.placeholder(tf.float32, [None, 3,3])
W = tf.Variable(tf.ones([3, 3]))
y = tf.matmul(x, W)
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
curr_y = sess.run(y, feed_dict={x: [[[1,2,3],[1,2,3]],[[1,1,4],[0,4,5]]]})
print curr_y
########编辑ValueError:Shape必须是等级2,但对于' MatMul'是等级3。 (OP: ' MatMul')输入形状:[?,3,3],[3,3]。
抱歉,我想要做的是将矩阵与一批矩阵或数组相匹配。所以我不想做
y = tf.matmul(x, W)
实际上,我想做
y = tf.matmul(W, x)
答案 0 :(得分:0)
你对张量'x'的输入有一个形状(2,2,3)。 你正试图进行(2,2,3)和(3,3)的矩阵乘法。他们没有相同的等级,这就是错误的原因。
来自Tensorflow官方网站的: https://www.tensorflow.org/api_docs/python/tf/matmul
Args:
a: Tensor of type float16, float32, float64, int32, complex64, complex128 and rank > 1.
b: Tensor with same type and rank as a.
答案 1 :(得分:0)
当你进行矩阵乘法时,矩阵的shape
需要follow the rule
(a, b) * (b, c) = (a, c)
请记住您定义的W的形状为(3,3)。
这个feed_dict={x: [[1,2,3],[0,4,5]]}
是一个2D数组,它的形状是(2,3)
In [67]: x = [[1, 2, 3], [0, 4, 5]]
In [68]: x = np.array(x)
In [69]: x.shape
Out[69]: (2, 3)
遵循规则(2, 3) * (3, 3) => (2, 3)
但是你的第二个例子,形状不遵循乘法规则。输入的形状是(2,2,3),它甚至与您定义的W的尺寸不同,因此它不起作用。
In [70]: foo = [[[1,2,3],[1,2,3]],[[1,1,4],[0,4,5]]]
In [71]: foo = np.array(foo)
In [72]: foo.shape
Out[72]: (2, 2, 3)