LibTorch张量基础

一、代码中的张量类型

张量类型 代码定义逻辑 维度本质(直观理解) 实际应用场景举例
1D int 张量 torch::tensor({1,2,...10}, torch::kInt32) 一维向量(长度 10) 标签数组、单维度特征
2D float 张量 torch::randn({4,512}, torch::kFloat32) 二维矩阵(4 行 512 列) 4 个样本,每个样本 512 维特征
3D float 张量 torch::randn({8,4,64}, torch::kFloat32) 三维张量(8 个 4×64 的矩阵) 8 个批次,每个批次 4×64 的特征图

1D的张量 步长也是stride={1}

2D张量 步长为{列数,1}

3D张量 步长为{行×列,列,1}

二、函数签名

复制代码
torch::Tensor torch::tensor(
    const c10::ArrayRef<T>& data,//数据源
    const torch::TensorOptions& options = {}//张量配置
);

使用的场景如下:

复制代码
//1D
auto tensor_1d = torch::tensor({1,2,3}, torch::dtype(torch::kInt32));

//从数组创建
int arr[] = {4,5,6};
auto tensor_from_arr = torch::tensor(arr, torch::dtype(torch::kInt32));

//std::vector创建,适合动态数据
std::vector<float> vec = {1.1f, 2.2f, 3.3f};
auto tensor_from_vec = torch::tensor(vec, torch::dtype(torch::kFloat32));

//指定设备(GPU,需GPU版LibTorch)
auto tensor_gpu = torch::tensor({1,2,3}, 
    torch::dtype(torch::kInt32).device(torch::kCUDA)
);

当然,如果不指定dtype,LibTorch 会自动推断:int 列表→kInt64,float 列表→kFloat32;

如果数据量极大(如 100 万元素),torch::tensor的拷贝会非常耗时,此时用torch::from_blob也就是浅拷贝(共享内存),但需注意原数据的生命周期否则原数据释放,会导致张量野指针。

三、常用接口

接口 适用场景 数据来源
torch::tensor 从已有 C++ 数据创建张量 原生数据(拷贝)
torch::randn 初始化权重(正态分布) 无(生成随机数)
torch::zeros 初始化偏置、全零矩阵 无(生成 0)
torch::ones 生成全 1 张量 无(生成 1)

补充:

张量的内存布局

连续张量的步长满足stride[i] = stride[i+1] * size[i+1],可通过is_contiguous()判断;张量转置后会变成非连续张量,而view操作要求张量内存连续,因此转置后用view会报错,需先调用contiguous()(触发数据拷贝)转为连续张量。

张量的设备迁移

LibTorch 张量默认在 CPU,迁移到 GPU 用tensor.to(torch::kCUDA),转回 CPU 用tensor.to(torch::kCPU);核心考点是不同设备的张量无法直接运算,必须先统一设备,否则会报错。

张量的数据类型转换

不同数据类型(如 int、float)的张量无法直接运算,会触发类型错误;转换可使用通用方法tensor.to(torch::kFloat32),或快捷方法tensor.float()/tensor.int(),运算前需先统一类型。

张量的形状操作

view仅支持连续张量,仅修改维度描述无数据拷贝;reshape更灵活,非连续时会自动转连续再改形状(可能拷贝)。squeeze压缩尺寸为 1 的维度,unsqueeze扩展维度(如 1D 张量转 2D 可用unsqueeze(0))。

相关推荐
极客 - L U7 小时前
神经网络 - 激活函数、损失函数、优化器
人工智能·深度学习·神经网络
小蒋观天下10 小时前
专项方案:大场景港口AI安防、多干扰环境下的算法调优与落地实操
人工智能·深度学习·算法·安全·机器学习·计算机视觉·ai大模型
wuyk55512 小时前
ROS2 Humble 从入门实战教程:第六章:节点:机器人的工作细胞
机器学习
朝朝辞暮i12 小时前
VLA 系统学习第 3 课:从一次机器人示范,到真正送进神经网络的 Batch
人工智能·python·深度学习·神经网络·vla
Axis tech16 小时前
通过MANUS手套推进由触觉驱动的机器人学习进程
人工智能·深度学习
数聚天成DeepSData16 小时前
教育年限数据库跨版本对齐:年龄组、性别与五年间隔怎么处理
人工智能·深度学习·机器学习·数据集·deepsdata
梦帮科技17 小时前
端侧编译原理:TVM / MLIR 计算图模式匹配、算子融合与显存生命周期复用
网络·人工智能·深度学习·神经网络·自然语言处理·cnn·mlir
新新学长搞科研17 小时前
【SPIE出版丨EI稳定检索】第三届模式识别与图像分析国际学术会议(PRIA 2026)
图像处理·机器学习·图像分析
糖炒狗子17 小时前
NeurIPS 2025 最佳论文逐行拆解:一个 sigmoid 门控,让 Attention Sink 从 46.7% 掉到 4.8%
人工智能·深度学习
饼饼学习空间智能18 小时前
低空经济进入新兴支柱产业:物理AI如何重构低空智能监管系统?
大数据·深度学习·机器学习