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