繁体   English   中英

ValueError: Shape must be rank 2 but is rank 1 for 'MatMul' (op: 'MatMul') with input shape: [2], [2,3]

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM