当前版本的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, 不知道今后会不会改