簡體   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