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