torch::from_blob是引用原始数据

Function torch::from_blob(void *, at::IntArrayRef, const at::TensorOptions&)

Exposes the given data as a Tensor without taking ownership of the original data.

sizes should specify the shape of the tensor. The TensorOptions specify additional configuration options for the returned tensor, such as what type to interpret the data as.

以上是pytorch官方文档。

在PyTorch中,torch::from_blob 函数用于根据提供的原始数据指针、形状和数据类型创建一个Tensor。这个Tensor会引用你提供的内存区域,而不是复制它。因此,当原始数据被析构或修改时,Tensor的内容也会相应地改变或变得无效。
如果你使用torch::from_blob创建了一个Tensor,然后原始数据的生命周期结束了(例如,包含数据的对象被析构了),那么继续访问这个Tensor可能会导致未定义行为,包括程序崩溃。
在C++中,如果你想要确保Tensor在原始数据生命周期结束之后仍然有效,你需要确保数据的生命周期至少和Tensor一样长,或者你可以通过调用.clone()或.detach()方法来创建Tensor的副本,这样Tensor将拥有自己的数据副本,与原始数据独立。

#include <torch/torch.h>

int main() {
    // 假设你有一个数据指针和数据大小
    float data[] = {1.0, 2.0, 3.0, 4.0};
    auto size = sizeof(data) / sizeof(data[0]);

    // 使用from_blob创建Tensor
    auto options = torch::TensorOptions().dtype(torch::kFloat32);
    torch::Tensor tensor = torch::from_blob(data, {size}, options);

    // 为了防止数据析构,我们可以克隆Tensor
    torch::Tensor tensor_copy = tensor.clone();

    // 现在,即使data的生命周期结束了,tensor_copy仍然有效
    // ...

    return 0;
}

还有if语句里的临时变量在执行完if语句后会被析构,这个也需要注意,结合以上,要把原始数据和Tensor在if语句外面声明定义,这样转换的Tensor在执行完if语句后才不会变。

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值