假设我们有如下的代码
#include <torch/torch.h>
int main() {
    auto param = torch::nn::Linear(2,2)->bias;
    auto input_param = torch::nn::Linear(2,2)->bias; 
    param = input_param;
}此时我们会常规的认为这样的赋值会直接修改param的对象,然而事实是并不会。查看发现torch::Tensor下有一个copy_函数
于是修改为
#include <torch/torch.h>
int main() {
    auto param = torch::nn::Linear(2,2)->bias;
    auto input_param = torch::nn::Linear(2,2)->bias; 
    param.copy_(input_param);
}还是有报错
what():  a leaf Variable that requires grad has been used in an in-place operation. (check_inplace at ../../torch/csrc/autograd/VariableTypeUtils.h:46)含义大概是说自动求导的Tensor不允许直接修改(可能会破坏自动求导?
需要修改为
int main() {
    auto param = torch::nn::Linear(2,2)->bias;
    auto input_param = torch::nn::Linear(2,2)->bias; 
    param.data().copy_(input_param.clone());
}这里加上的clone()可以不需要(为了安全点就加上了
需要注意的是对tensor的赋值必须使用data()获取内部数据才行
      声明:
      
        本文采用
        BY-NC-SA
        协议进行授权,如无注明均为原创,转载请注明转自
        云曦的秘密基地
        
本文地址: LibTorch下Tensor的复制
      本文地址: LibTorch下Tensor的复制
