飞桨: 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数据集为例子:
飞桨: Error: op accuracy does not have kernel for data_type[int64_t]:data_layout[ANY_LAYOUT]:place_第1张图片
假设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, 不知道今后会不会改

你可能感兴趣的:(paddlepaddle历险记,深度学习,机器学习,神经网络,python,paddlepaddle)