无法在C++端获得相同的输出张量值。

问题描述 投票:0回答:1

我尝试用libtorch 1.4在C++端对一个4类分类项目进行预测。但是,与Python相比,我无法获得相同的预测结果。首先,我在预测前获得了相同的输入张量值。当我比较输出张量值时,我发现它们是不同的。你可以在该图中找到这些值。

enter image description here

左边是Python的输出张量值和每个输入图片的预测结果。

右边包括C++输出张量值和每张输入图片的预测结果。

你能提供一个解决方案来获得相同的输出张量值和预测结果吗?

c++ machine-learning deep-learning computer-vision pytorch
1个回答
0
投票

我注意到我使用opencv函数来应用归一化。

subtract(image, Scalar(0.485, 0.456, 0.406), temp);
divide(temp, Scalar(0.229, 0.224, 0.225), image);

这个操作只改变了第一个通道,没有改变其他通道。由于这个原因,事实上,输入张量的值是不同的。我在写这段代码时直接对张量值应用了归一化。

tensor_image = tensor_image.permute({ 2,0,1 });//chw
tensor_image = tensor_image.toType(torch::kFloat);
tensor_image = tensor_image.div(255.0);
//normalize
tensor_image[0] = tensor_image[0].sub_(0.485).div_(0.229);
tensor_image[1] = tensor_image[1].sub_(0.456).div_(0.224);
tensor_image[2] = tensor_image[2].sub_(0.406).div_(0.225);

因此,与Python相比,我得到了相同的输入张量值。经过预测,我得到了相同的输出张量值。我的问题解决了。

© www.soinside.com 2019 - 2024. All rights reserved.