数值错误:'MatMul'的形状必须为2维,但对于输入形状为[2],[2,3]的操作(op: 'MatMul')其形状为1维。

8

我是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()
3个回答

6
常量 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)。
希望能对您有所帮助。

另外,我认为tf.matmul仅在两个数组都是二维时才有效。- 谢谢,这正是我的问题。 - nj2237

3
在您的情况下,变量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的张量,且等级大于1。
b:与a相同类型和等级的张量。

1
"

x的形状为(2,),与w1的形状(2,3)不匹配。

您应该进行更改。

"
x = tf.constant([0.7,0.9])

x = tf.constant([[0.7,0.9]])

现在x的形状为(1,2),运行正常。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接