【问题标题】:What's the equivalent of numpy.spacing(1) in libtorch?libtorch 中 numpy.spacing(1) 的等价物是什么?
【发布时间】:2020-12-11 14:54:42
【问题描述】:

似乎 pytorch 确实有/公开了 finfo link,但我在 libtorch 中找不到它。它甚至可以在 libtorch 中使用吗?使用 torch.finfo 我可以轻松做到:

esp = torch.finfo(torch.float).eps

我相信它是 np.spacing(1) 的对应物/等效物,但在 libtorch 中我不能做同样的事情,因为我找不到任何 finfo 类的痕迹。我该怎么办?

【问题讨论】:

    标签: c++ numpy torch libtorch


    【解决方案1】:

    有一个 TypeInfo.cpp 模块 (pytorch/torch/csrc/TypeInfo.cpp),不幸的是你提到的方法 (torch.finfo(torch.float).eps) 似乎是私有的,因为它被标记为static在翻译单元内:

    static PyObject* THPFInfo_eps(THPFInfo* self, void*) {
      return AT_DISPATCH_FLOATING_AND_COMPLEX_TYPES_AND2(at::kHalf, at::ScalarType::BFloat16,
          self->type, "epsilon", [] {
            return PyFloat_FromDouble(
                std::numeric_limits<
                    at::scalar_value_type<scalar_t>::type>::epsilon());
          });
    }
    

    但是,在相应的标头中,有一个 extern 声明:

    extern PyTypeObject THPFInfoType;
    

    THPFInfoType 似乎是一个包含以下函数指针的实例:THPFInfo_str。另一方面,此函数打印以下内容:

    PyObject* THPFInfo_str(THPFInfo* self) {
      std::ostringstream oss;
      oss << "finfo(resolution=" << PyFloat_AsDouble(THPFInfo_resolution(self, nullptr));
      oss << ", min=" << PyFloat_AsDouble(THPFInfo_min(self, nullptr));
      oss << ", max=" << PyFloat_AsDouble(THPFInfo_max(self, nullptr));
      oss << ", eps=" << PyFloat_AsDouble(THPFInfo_eps(self, nullptr));
      oss << ", tiny=" << PyFloat_AsDouble(THPFInfo_tiny(self, nullptr));
      oss << ", dtype=" << PyUnicode_AsUTF8(THPFInfo_dtype(self, nullptr)) << ")";
    
      return THPUtils_packString(oss.str().c_str());
    }
    

    这显然打印了eps 信息。也许您可以以某种方式将您的目标与 TypeInfo.cpp 链接并使用上述定义?

    【讨论】:

    • 非常感谢非常感谢。会看看这个
    【解决方案2】:

    事实证明,我们可以简单地使用std::nextafter 就可以了。最近还添加了torch::nextafter (#42580) 并在后台使用它!

    所以如果你不使用 nighlybuilds,直到 1.7 发布,你可以简单地使用 std::nextafter 就好了!关于THPFinfo

    THPFInfo 和 THPFInfo_eps 的存在是为了让这些信息在 蟒蛇

    Source

    【讨论】:

      猜你喜欢
      • 2020-12-08
      • 2021-05-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-29
      • 2011-07-19
      • 2014-05-08
      相关资源
      最近更新 更多