1. 程式人生 > >[Bug集合]Rank mismatch: Rank of labels (received 2) should equal rank of logits minus 1 (received 2)

[Bug集合]Rank mismatch: Rank of labels (received 2) should equal rank of logits minus 1 (received 2)

在使用tf.nn.sparse_softmax_cross_entropy_with_logits(logits, labels)語句時產生。
原因是logits和labels在使用時有labels應該少一維的限制。
比如一個tensorflow的分類問題,
logits應該是batch×classes的一個矩陣,classes為類別數量
labels應該是長batch的一個數組
當logits判斷圖片為某一類時,對應classes的位置為1


例子,比如貓狗大戰吧。
當你一批次訓練10張圖片時,batch為10,貓狗總共兩種分類。
logits就應該是類似這樣的一個10×2的矩陣:
[
0 1
1 0
0 1
0 1
0 1
1 0
1 0
1 0
1 0
0 1
]
10是10張圖片, 每行第一個位置如果為1,那麼這一張圖片是狗,每行第二個位置如果為1,那麼這一張圖片是貓。
而此時的label應該是一個這樣的一維矩陣:
[2 1 2 2 2 1 1 1 1 2]
logits和label滿足這種形式時使用tf.nn.sparse_softmax_cross_entropy_with_logits(logits, labels)語句是正確的。
我一開始把兩個都弄成二維格式就出現瞭如上錯誤。