为什么C+中的'is#u same'+;与从文件读取的相同张量进行比较时,PyTorch API失败?

为什么C+中的'is#u same'+;与从文件读取的相同张量进行比较时,PyTorch API失败?,pytorch,libtorch,Pytorch,Libtorch,为什么torch::Tensor::is_same会使以下断言失败?使用C++ PyTrac API将张量写入文件,然后再次读入另一张量,并且 ISSUM相同< /代码>比较两张量: torch::Tensor x_sequence = torch::linspace(0, M_PI, 1000); torch::save(x_sequence, "x_sequence.dat"); torch::Tensor x_read; torch::load(x_read,

为什么
torch::Tensor::is_same
会使以下断言失败?使用C++ PyTrac API将张量写入文件,然后再次读入另一张量,并且<代码> ISSUM相同< /代码>比较两张量:

torch::Tensor x_sequence = torch::linspace(0, M_PI, 1000);    
torch::save(x_sequence, "x_sequence.dat");
torch::Tensor x_read;
torch::load(x_read, "x_sequence.dat");
assert(x_read.is_same(x_sequence));  
这导致:

int main(int, char**): Assertion `x_read.is_same(x_sequence)' failed.
使用

  • python pytorch,Arch Linux上的1.6.0-2版
  • g++(GCC)10.1.0

火炬::张量::相同(恒火炬::张量和其他)
已定义。需要注意的是,
Tensor
实际上是底层
TensorImpl
类(实际保存数据)上的指针

因此,当调用
is_same
时,检查的实际上是指针是否相同,即两个张量是否指向相同的底层内存。下面是一个非常简单的示例,可以很好地理解它:

auto x = torch::randn({4,4});
auto copy = x;
auto clone = x.clone();
std::cout << x.is_same(copy) << " " << x.is_same(clone) << std::endl;
>>> 0 1
autox=torch::randn({4,4});
自动复制=x;
自动克隆=x.clone();
标准::cout