gpt4 book ai didi

c++ - libtorch 中 numpy.spacing(1) 的等价物是什么?

转载 作者:行者123 更新时间:2023-12-02 10:11:09 26 4
gpt4 key购买 nike

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

esp = torch.finfo(torch.float).eps
我相信这是 np.spacing(1)的对应物/等价物但在 libtorch 中我无法做同样的事情,因为我找不到任何 finfo 的痕迹类(class)。我该怎么办?

最佳答案

有一个 TypeInfo.cpp 模块 (pytorch/torch/csrc/TypeInfo.cpp),不幸的是你提到的方法 (torch.finfo(torch.float).eps) 似乎是私有(private)的,因为它被标记为 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 链接并使用上述定义?

关于c++ - libtorch 中 numpy.spacing(1) 的等价物是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63536093/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com