[英]Shape must be rank 2 but is rank 3 for 'MatMul_46' (op: 'MatMul') with input shapes: [100,100], [?,15,100]
[英]ValueError: Shape must be rank 2 but is rank 1 for 'MatMul' (op: 'MatMul') with input shapes: [2], [2,3]
我对 Tensorflow 来说是个新闻。 我已经在搜索相同的问题,但我无法理解。 有代码。希望你能帮助我。
代码:
import tensorflow as tf
w1 = tf.Variable(tf.random_normal([2,3],stddev=1,seed=1))
w2 = tf.Variable(tf.random_normal([3,3],stddev=1,seed=1))
x = tf.constant([0.7,0.9])
a = tf.matmul(x, w1)
y = tf.matmul(a, w2)
sess = tf.Session()
sess.run(w1.initializer)
sess.run(w2.initializer)
print(sess.run(y))
sess.close()
常数x
的形状是(2,)
,即一维数组,并且您试图将其与形状为(2, 3)
的二维数组w1
相乘,这对于矩阵乘法是不可能的,因为数字第一个参数的列数必须等于第二个参数中的行数。 另外,我认为tf.matmul
仅在两个数组都是二维的情况下才有效。
您可以将x
的声明更改为的众多方法之一
x = tf.constant([[0.7], [0.9]])
这将创建一个形状为 (2, 1) 的二维常数张量。 然后乘以它,
a = tf.matmul(tf.transpose(x), w1)
tf.transpose()
用于创建形状为 (2, 1) 的数组 x 到形状 (1, 2) 的转置。
希望这可以帮助。
在您的情况下,变量 x 的等级为 1。因此问题。
以下是您遇到此问题的原因。
请参考tensorflow API https://www.tensorflow.org/api_docs/python/tf/matmul
tf.matmul( a, b , transpose_a=False, transpose_b=False, adjoint_a=False, adjoint_b=False, a_is_sparse=False, b_is_sparse=False, name=None)
参数:
a: float16, float32, float64, int32, complex64, complex128 和rank > 1类型的张量。
b:与a具有相同类型和等级的张量。
x
的形状是(2,)
(2,3)
与w1
的形状(2,3)
不匹配。
你应该改变
x = tf.constant([0.7,0.9])
到
x = tf.constant([[0.7,0.9]])
现在x
的形状是(1,2)
并且工作正常。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.