tensorflow錯誤:Shape (10, ?) must have rank at least 3


  錯誤的代碼

 outputs, _ = tf.nn.dynamic_rnn(cell, X, dtype=tf.float32)

  錯誤原因:

  該錯誤的意思是傳入的數據集X的維度只有二維,而tf.nn.dynamic_rnn()要求傳入的數據集的維度是三維(batch_size, squence_length, num_features)。在這里因為特征是一維,因此沒有顯示。

  解決方案:

X = tf.expand_dims(X, axis=2)

  類似的錯誤:

  ValueError: Shapes (?, 1) and (?,) are incompatible

  錯誤代碼:

loss = tf.losses.mean_squared_error(labels=y, predictions=predictions)

  錯誤原因:

  和上面的一致

  解決方案:

y = tf.expand_dims(y, axis=1)

  一個代碼里面碰到兩個這樣的問題,之后碰到維度不匹配的感覺都可以用這個方法去解決,那就來看下這個方法吧。

tf.expand_dims(input, axis=None, name=None, dim=None)

  方法的目的:

  插入一個維度到tensor中,主要是處理維度不匹配的現象 

  參數詳解:

  input:輸入的張量

  axis:指定插入張量的維度的索引,可以理解為一個四維張量的索引為(0,1,2,3),如果該值為負,則從末尾開始計數

  name:輸出的張量的名稱

  dim:等同於axis,不推薦使用     

  拓展:

tf.suqeeze(input, squeeze_dims=None, name=None)

  該方法用於壓縮維度的,也就是刪除所有大小為1的維度,類似的方法還要np.squeeze()

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM