为什么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