代码之家  ›  专栏  ›  技术社区  ›  Hossein

相当于什么数字间距(1) 在利伯托?

  •  0
  • Hossein  · 技术社区  · 6 年前

    看来Pythorch确实有 finfo link ,但我在里面找不到 libtorch . 它是否已经在libtorch中提供?使用火炬.finfo我很容易做到:

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

    我认为是对应的 np.spacing(1) 但在利伯托,我不能做同样的事情,因为我找不到任何痕迹 芬福 班级。我该怎么办?

    0 回复  |  直到 6 年前
        1
  •  1
  •   Marek Piotrowski    6 年前

    有一个类型信息.cpp模块(pytorch/torch/csrc/类型信息.cpp),不幸的是你提到的方法(火炬.finfo(火炬、浮子).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 信息。也许你可以把你的目标和类型信息.cpp并利用上述定义?

        2
  •  0
  •   halfer Jatin Pandey    6 年前

    std::nextafter 很好。还有 torch::nextafter 最近添加的( #42580

    标准::下一个 很好!关于 THPFinfo :

    THPFInfo和THPFInfo_eps的存在使此信息在中可用 python

    Source

    推荐文章