所以,我想用矩阵乘以矩阵。当我尝试一个带有矩阵的数组时,它是工作的:
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_yValueError:形状必须为2级,但对于输入形状:?、3、3、3、3的“MatMul”(op:“MatMul”),则为3级。
########EDIT
对不起,我想做的是,将一个矩阵匹配成一批矩阵或数组。所以我不想
y = tf.matmul(x, W)实际上,我想
y = tf.matmul(W, x)发布于 2017-12-10 21:30:40
你对张量“x”的输入有一个形状(2,2,3)。你在做(2,2,3)和(3,3)的矩阵乘法。他们的军衔不一样,这就是错误的原因。
来自Tensorflow官方网站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.发布于 2017-12-11 00:09:16
在进行矩阵乘法时,矩阵的shape需要遵循规则 (a, b) * (b, c) = (a, c)。
记住你定义的W的形状是(3,3)。
这个feed_dict={x: [[1,2,3],[0,4,5]]}是一个二维数组,它的形状是(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)https://stackoverflow.com/questions/47739284
复制相似问题