簡體   English   中英

ValueError:Shape必須是2級,但是'MatMul'的排名是3

[英]ValueError: Shape must be rank 2 but is rank 3 for 'MatMul'

我有以下TensorFlow代碼:

layer_1 = tf.add(tf.matmul(tf.cast(x, tf.float32), weights['h1']), biases['b1'])

但是拋出以下錯誤:

ValueError: Shape must be rank 2 but is rank 3 for 'MatMul' (op: 'MatMul') with input shapes: [?,5741,20000], [20000,128].

它說x的形狀為(?,5741,20000)。 我怎樣才能將x的形狀轉換為(5741,20000)?

先感謝您!

我建議使用張量點積而不是簡單矩陣乘法,以保持批量大小。 這個答案比@mrry更通用

layer_1 = tf.add(tf.tensordot(tf.cast(x, tf.float32), weights['h1'], [[2], [0]]), biases['b1'])

看起來你正試圖將'x'與'權重'進行矩陣乘法運算。 對於一個示例,x的形狀為[5741,20000],但是當您批量提供示例時,x將具有[?,5741,20000]的形狀。 同樣,權重也應該具有[?,20000,128]的形狀。 但是,從錯誤中看,你的權重看起來仍然是[20000,128],這告訴我你的代碼中有一些問題沒有將權重變量轉換為形狀[?,20000,128]。 當你能想到這一點時,錯誤就會消失。 矩陣乘法的結果應該是[?,5741,128]的形狀

假設x的動態形狀x(1, 5741, 20000)可以將其形狀變換到(5741, 20000)使用tf.squeeze()如下:

x = tf.squeeze(x, axis=[0])

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM