libtorch torch::from_blob踩坑

2023-10-30

libtorch中 torch::from_blob函数 可以把外部内存创建一个tensor,这里给个简单错误示例

 torch::Tensor example()
 {
		std::vector<float> res_data;
		res_data.resize(3 * 224* 224);
		torch::Tensor res_tensor = torch::from_blob(res_data.data(),{1, 3,244, 224});
		return std::move(res_tensor);
}

开始认为这个函数会拷贝一份到内存,但是这个把res_data指针传入,他内部并不会拷贝到tensor的cpu内存,只是把指针指向了这块地址,当你的res_data被析构,然后被其他地方使用,里面内容就会变化。

如果后续你不需要tensor的cpu内容,可以简单改成

return std::move(res_tensor.cuda());

就是在析构之前这里会创建一个指向gpu的tensor,并把内容拷贝到显存.

如果需要cpu做计算那就不能释放res_data,在libtorch头文件里能找到该函数的一个重载接口

using Deleter = std::function<void(void*)>;
inline at::Tensor from_blob(
    void* data,
    at::IntArrayRef sizes,
    const Deleter& deleter,
    const at::TensorOptions& options = at::TensorOptions())

这里的res_data需要在堆区new 出来,同时把析构方法作为低三个参数传入from_blob函数
Tensor在析构的时候会调用你的释放方法,释放掉这段内存.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

libtorch torch::from_blob踩坑 的相关文章

  • 软件测试与质量学习笔记3--白盒测试

    1 白盒测试的两种常用技术 覆盖测试 在测试过程中 以覆盖某些程序元素为测试目标的测试 路径测试 从流程图上讲 程序的一次执行对应于从入口到出口的一条路径 针对路径的测试即为路径测试 从广义的角度讲 任何有关路径分析的测试都可以被称为路径测
  • MATLAB大小写字符的转换

    输入一个字符 若为大写字母 则输出其对应的小写字母 若为小写字母 则输入其对应的大写字母 若为数字字符则输出其对应的数值 若为其他字符则原样输出 第一种 clear clc n input enter a number n if n gt
  • 基于STM32的ESP8266使用教程(四)(短篇)

    写在前面 在上一篇中介绍了通过单片机发送指令控制WIFI模块 本来想写一下时钟 I O口及串口的初始化函数 但是因为项目年代久远 一年前做的 怕有错误 误导博友 故不给出代码 见谅 本章要介绍Android端通过WIFI与手机建立连接并通信
  • 代码示例:面向对象——封装、继承、多态(多态的四种类型)

    面向对象 封装 继承 多态 多态的四种类型 1 封装 把客观事物封装成抽象的类 并且类可以把自己的数据和方法只让可信的类或者对象操作 对不可信的进行信息隐藏 public 所有实体都可以访问 protected 只允许本类 和子类 的成员函
  • 【动态规划】---入门(一)

    文章目录 前言 一 斐波那契数列 二 爬楼梯 总结 前言 动态规划入门学习文章记录及总结 动态规划算法的基本思想是 将待求解的问题分解成若干个相互联系的子问题 先求解子问题 然后从这些子问题的解得到原问题的解 对于重复出现的子问题 只在第一
  • 综合案例——手写数字图像处理算法比较

    手写数字图像识别各种算法的比较 1 准备工作 1 1 数据集介绍 使用到了两个手写数字的数据集 scikit learn 中的手写数字数据集 mnist 中的手写数字数据集 1 1 1 scikit learn 中的手写数字数据集 首先来看

随机推荐

  • 清理QT SDK编译后,examples目录中的pdb ilk exp等垃圾文件

    for R s in do del q s s pdb s ilk s exp pause 将上面的代码保存为bat 放到examples根目录下运行 上面的方法是我走的冤枉路 下面的这种方法更简单 在用nmake编译完成后 直接运行nma
  • Bean定义注册机

    org springframework beans factory support BeanDefinitionRegistry 注册Bean定义 org springframework beans factory support Bean
  • docker 安装 oracle

    docker 安装 oracle 拉取镜像 docker pull jaspeen oracle xe 11g 因为版本不同有的可能是jaspeen oracle 11g 运行镜像文件 docker run p 1521 1521 name
  • mysql游标的使用

    p 这是一个游标的使用例子 但是其中有几点需要注意 就是为什么要加入 declare CONTINUE HANDLER FOR SQLSTATE 02000 SET tmpname null 这样的一句话 如果不加的话将直接报错 No da
  • Elasticsearch学习4-数据修改

    数据修改 原文请查看 Modifying Your Data Elasticsearch 提供近乎实时的数据操作和搜索功能 默认情况下 从索引 更新 删除数据到数据出现在搜索结果中 你可以预估一秒钟的延迟 刷新间隔 这是与其他平台 如SQL
  • 波士顿房价(只依据一个特征的)预测

    波士顿房价数据集 波士顿房价数据集中一共有506条数据 涵盖506个不同郊区的房屋数据 在机器学习中 通常要把数据集划分为训练数据集和测试数据集 在波士顿数据库中 默认其中404条是训练数据集 102条作为测试数据集 其中 每条数据有14个
  • arcgis10之矢量数据生成tiff文件

    项目场景 shp数据有时数量过于庞大 不利于操作 但是可以将shp转化成tiff图片导出方便进行下一步操作 解决方案 使用arcgis将shp文件生成tiff即可 具体操作如下 第一步 将shp数据生成栅格数据 具体操作如下图 加载至arc
  • Unable to cast object of type 'System.Decimal' to type 'System.Array'.

    数据库有一个字段AppID 类型定义为numeric 38 0 实体描述如下 Key Column APP ID Required ErrorMessage APP ID不能为空 MaxLength 38 ErrorMessage APP
  • 文件时间对于CP命令的影响

    今天在打包安装包的时候 碰到这样一个问题 打包的服务器时间由于测试需要被改到这个月的月底了 打包的时候我也没有在意这个细节 直接在服务器上重新编译这个代码并且将需要更新的so文件打入tar包里面 tar包的时间 包里面文件的时间都变成这个月
  • 详解如何建立Qt插件学习教程

    如何建立Qt插件学习教程是本文要介绍的内容 主要是来了解QT中插件的应用 如何来建立 文中有详解 具体内容的实现来看详解 QT提供2个API来建立插件 1 高层API扩展QT库 例如定制的数据库驱动 图像格式 字符编码 custom sty
  • 更改远程桌面端口

    远程终端服务是一项功能非常强大的服务 同时也成了入侵者长驻主机的通道 入侵者可以利用一些手段得到管理员账号和密码并入侵主机 这就需要我们来修改默认端口 防范黑客入侵 远程终端服务基于端口3389 入侵者一般先扫描主机开放端口 一旦发现其开放
  • 怎么用计算机输入名字,怎么用电脑起名字

    怎么用电脑起名字 我姓李我老婆姓贺我想给宝宝取个名字 宝宝想跟我 老婆姓贺 最好是叫贺李 怎么通过电脑给宝宝取个高分的名字 输入宝宝出生的年 月 日 时辰 姓什么 男宝宝还是女宝宝 然后查一下就知道了 也可以先找人算一下宝宝属于什么命 命中
  • 虚拟机网络模式设置仅主机模式

    说明 为了更好的模拟生产服务器 可以在本地虚拟机进行相关测试 一般实际的生产服务器是仅能与本地主机或内网相同 所以虚拟机设置固定IP 选择仅主机模式做测试尤为重要 虚拟机网络模式选择Hostonly 即仅主机模式 设置固定IP 和主机相同
  • CentOS 7 修改默认 yum 源

    一 修改CentOS默认yum源为mirrors aliyun com 1 首先备份系统自带的yum源配置文件 root localhost mv etc yum repos d CentOS Base repo etc yum repos
  • android历史记录的搜索页

    保存搜索记录 public void saveSearchHistory String inputText SharedPreferences sp WDApplication getContext getSharedPreferences
  • DoubleCheck验证(双重检查锁和延迟初始化)

    场景 二话不说 直接上代码 public class DoubleCheckDemo private static DoubleCheckDemo demo public DoubleCheckDemo getDemo if demo nu
  • 架构师成长之路|Redis 安装介绍以及内存分配器jemalloc

    安装 Redis官网 https redis io download 下载安装二进制文件 可下载安装最新版Redis7 2 0 或者可选版本6 x 我这里下载6 2 13和7 2最新版本 后面我们都是安装6 2 13版本的信息进行讲解 二进
  • gitlab用法教程

    目录 上传文件 1 对待git上新建空文件夹的方式 2 如果git上已有文件夹 一些常见问题 上传文件 1 对待git上新建空文件夹的方式 右击待上传文件夹名字 选择 git bash here 然后依次输入如下命令 git init 当前
  • 软件工程-白盒测试

    1 写出MaCabe方法计算程序环形复杂度的三种方法 V G 流图中的区域数 V G E N 2 其中E是流图中的边数 N是结点数 V G P 1 其中P是流图中判定结点的数目 2 什么是白盒测试 白盒测试又称结构测试 透明盒测试 逻辑驱动
  • libtorch torch::from_blob踩坑

    libtorch中 torch from blob函数 可以把外部内存创建一个tensor 这里给个简单错误示例 torch Tensor example std vector