libtorch学习笔记(3)- 一些基本概念
程序员文章站
2023-04-03 20:28:40
几个基本概念标量 (scaler)看名称scaler就知道它是一个数字,在libtorch中可以把标量视为零阶张量,可以如此声明// 标量auto scaler = torch::tensor(1.0f);std::cout << "scaler sizes() length: " << scaler.sizes().size() << "\n" << scaler << std::endl;输出结果:向量 (vector)向量...
几个基本概念
1. 标量 (scaler)
看名称scaler就知道它是一个数字,在libtorch中可以把标量视为零阶张量,可以如此声明
// 标量
auto scaler = torch::tensor(1.0f);
std::cout << "scaler sizes() length: " << scaler.sizes().size() << "\n" << scaler << std::endl;
输出结果:
2. 向量 (vector)
向量就是一列数,
在libtorch中可以把向量看作一阶张量,可以如此声明:
// 向量
auto v = torch::tensor({ 1, 2, 3, 4 });
std::cout << "v sizes() length: " << v.sizes().size() << "\n" << v << std::endl;
输出结果:
不能把向量理解成1xN或者Nx1的矩阵,可以用Tensor.t()来验证,不论怎么转换,都是一样的。
3. 矩阵 (matrix)
矩阵是二维数组,
可以看作二阶张量,可以如此声明:
// 矩阵
auto m = torch::randn({ 2, 8 });
std::cout << "m sizes() length: " << m.sizes().size() << "\n" << m << std::endl;
输出结果如下:
要做数学上的矩阵运算,需使用matmul,普通的*乘法符号可能会得到不同的结果,请看:
torch::Tensor A = torch::randint(0, 16, { 1, 4 });
std::cout << "A (rows: " << A.sizes()[0] << ", cols: " << A.sizes()[1] << ")\n" << A << std::endl;
std::cout << "AT:\n" << A.t() << std::endl;
std::cout << "A.matmul(AT): \n" << A.matmul(A.t()) << std::endl;
std::cout << "A*AT: \n" << A*A.t() << std::endl;
输出结果:
4. 张量 (tensor)
可以是n阶的,n从0到无穷大,一个典型的多阶张量就是表示图像的数据,图像可以分解成R,G,B三个通道,或者Y,U,V三个通道,然后每个通道都是一个二阶矩阵,里面存放各个颜色通道的值。
这是一个三阶张量的申明:
// 张量
auto t = torch::randn({ 3, 5, 5 });
std::cout << "t sizes() length: " << t.sizes().size() << "\n" << t << std::endl;
输出结果:
本文地址:https://blog.csdn.net/defi_wang/article/details/107453819
上一篇: 大话设计模式笔记(二十六)の总结
下一篇: 关于trait()
推荐阅读
-
Linux内核学习笔记(4)-- wait、waitpid、wait3 和 wait4
-
jQuery学习笔记之jQuery+CSS3的浏览器兼容性
-
【莫烦强化学习】视频笔记(二)3.Q_Learning算法实现走迷宫
-
C学习笔记(3)---作用域,数组, (少量指针入门)
-
pygame学习笔记(3):运动速率、时间、事件、文字
-
HTML5学习笔记简明版(3):新元素之hgroup,header,footer,address,nav
-
vue.js 学习笔记3——TypeScript
-
Orleans[NET Core 3.1] 学习笔记(三)( 3 )服务端配置
-
荐 opencv进阶学习笔记3:像素运算和图像亮度对比度调节
-
关于Vue.js一些问题和思考学习笔记(1)