Pytorch torch.cholesky在哪里?torch如何引用其方法?
我正在做一些关于Cholesky分解的研究,这需要了解Pytorch torch.cholesky在哪里?torch如何引用其方法?,pytorch,Pytorch,我正在做一些关于Cholesky分解的研究,这需要了解torch.Cholesky的工作原理。在ATen上搜索了一段时间后,我被TensorMethods.h卡住了,有趣的是,它有以下代码: inline Tensor Tensor::cholesky(bool upper) const { #ifdef USE_STATIC_DISPATCH return TypeDefault::cholesky(const_cast<Tensor&>(*this), upper
torch.Cholesky
的工作原理。在ATen上搜索了一段时间后,我被TensorMethods.h卡住了,有趣的是,它有以下代码:
inline Tensor Tensor::cholesky(bool upper) const {
#ifdef USE_STATIC_DISPATCH
return TypeDefault::cholesky(const_cast<Tensor&>(*this), upper);
#else
static c10::OperatorHandle op = c10::Dispatcher::singleton().findSchema({"aten::cholesky", ""}).value();
return c10::Dispatcher::singleton().callUnboxed<Tensor, const Tensor &, bool>(
op, impl::dispatchTypeId(at::detail::multi_dispatch_tensor_type_set(*this)), const_cast<Tensor&>(*this), upper);
#endif
}
内联张量张量::cholesky(布尔上)常数{
#ifdef使用静态调度
返回TypeDefault::cholesky(const_cast(*this),上限);
#否则
静态c10::OperatorHandle op=c10::Dispatcher::singleton();
返回c10::Dispatcher::singleton().CallunBox(
op,impl::dispatchTypeId(at::detail::multi_dispatch_tensor_type_set(*this)),const_cast(*this),upper);
#恩迪夫
}
这就提出了torch如何定位其方法的问题。谢谢大家! 看一看哪一个函数描述了函数是如何注册到API的
ATen“本机”函数是添加运算符的现代机制
和ATen的功能(它们是“本地”的,而不是遗留的
通过TH/THC cwrap元数据绑定的函数)。土生土长的
函数在native_functions.yaml中声明并具有
在此目录中的一个cpp文件中定义的实现
如果我们查看并搜索cholesky
我们会发现
- func: cholesky(Tensor self, bool upper=False) -> Tensor
use_c10_dispatcher: full
variants: method, function
要找到入口点,基本上只需搜索目录中的.cpp文件并找到名为cholesky
的函数。目前可在以下网址找到:
从这一点来看,这只是遵循C++代码来理解正在发生的事情。
原谅我在这方面的知识不足,但我意识到我假设Python版本的Trac库拥有所有C++代码可用。它们存储在共享对象中,。因此
文件,这就是为什么我找不到函数cholesky
。非常感谢您的回复!!
Tensor cholesky(const Tensor &self, bool upper) {
if (self.size(-1) == 0) {
return at::empty_like(self, LEGACY_CONTIGUOUS_MEMORY_FORMAT);
}
squareCheckInputs(self);
auto raw_cholesky_output = at::_cholesky_helper(self, upper);
if (upper) {
return raw_cholesky_output.triu_();
} else {
return raw_cholesky_output.tril_();
}
}