【问题标题】:Cannot obtain same output tensor values in C++ side无法在 C++ 端获得相同的输出张量值
【发布时间】:2020-10-06 02:06:47
【问题描述】:

我尝试使用 libtorch 1.4 对 C++ 端的 4 类分类项目进行预测。但是,与 Python 端相比,我无法获得相同的预测。首先,我在预测之前获得相同的输入张量值。当我比较输出张量值时,我注意到它们是不同的。您可以在该图片中找到这些值:

左侧包括 Python 输出张量值和每个输入图片的预测结果。

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

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

【问题讨论】:

    标签: c++ machine-learning deep-learning computer-vision pytorch


    【解决方案1】:

    我注意到我使用 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 端相比,我获得了相同的输入张量值。经过预测,我得到了相同的输出张量值。我的问题解决了。

    【讨论】:

      猜你喜欢
      • 2019-04-08
      • 2021-11-03
      • 1970-01-01
      • 2017-10-24
      • 2020-07-09
      • 1970-01-01
      • 2016-02-05
      • 2022-11-03
      • 2019-01-02
      相关资源
      最近更新 更多