當前版本的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, 不知道今後會不會改