飛槳: Error: op accuracy does not have kernel for data_type[int64_t]:data_layout[ANY_LAYOUT]:place

當前版本的paddle是1.7

老鐵們,大家來看看完整的報錯是不是這個:

Error: op accuracy does not have kernel for data_type[int64_t]:data_layout[ANY_LAYOUT]:place[CUDAPlace(0)]:library_type[PLAIN] 
at (/paddle/paddle/fluid/imperative/prepared_operator.cc:101)

筆者在執行計算準確率的時候報了錯:

acc = fluid.layers.accuracy(predict, label)

筆者的代碼中:

>>> predict.shape
(32, 10)
>>> label.shape
(32, )

實際上, fluid.layers.accuracy中,
predict.shape應爲(batch_size, 類別數字),
label.shape應爲(batch_size, 1)

我舉個例子, 以MNIST數據集爲例子:
在這裏插入圖片描述
假設batch_size是32, 則輸入的shape是 (32, 784)
其中, 32是batch_size, 而784是28*28個像素點

模型預測的輸出值shape爲(32, 10)
其中, 32是batch_size, 而10是類別數

則label的shape應該是(32, 1),即可能爲

[[2], 
 [1], 
 [3], 
 [6], 
 [5], 
 ...
 [0], ]

而不是shape=(32,):

[2, 1, 3, 6, 5, ... 0]

最後再插一句, 在訓練的時候, 如果label的shape爲(batch_size, )或者(batch_size, 1)都是可以的,
但是在調用paddle.fluid.layers.accuracy的時候, label的shape必須爲(batch_size, 1)

當前版本的paddle是1.7, 不知道今後會不會改

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章