深度学习02-pytorch-03-张量的数值计算

ops/2024/9/23 18:03:09/

张量(Tensor)是多维数组的通用化概念,它可以表示标量(0维)、向量(1维)、矩阵(2维)以及更高维度的数据。在深度学习和数值计算中,张量是基础数据结构,特别是在 PyTorch 和 TensorFlow 等框架中,张量用于存储和操作数据。张量的数值计算可以包括基本的算术操作、线性代数运算、自动微分等。

下面我们来详细讨论张量的数值计算,包括常用的操作和具体示例。

1. 张量的创建

可以通过不同的方式创建张量,包括从列表、数组等生成张量。

​import torch# 创建一个标量张量
scalar = torch.tensor(5)
print(scalar)# 创建一个向量(1维张量)
vector = torch.tensor([1.0, 2.0, 3.0])
print(vector)# 创建一个矩阵(2维张量)
matrix = torch.tensor([[1, 2], [3, 4]])
print(matrix)# 创建一个3维张量
tensor_3d = torch.tensor([[[1, 2], [3, 4]], [[5, 6], [7, 8]]])
print(tensor_3d)

2. 张量的基本运算

张量可以进行各种基本的算术运算,如加法、减法、乘法、除法等。张量的这些操作可以是逐元素操作(element-wise),即对每个位置的元素进行操作。

加法、减法、乘法、除法
a = torch.tensor([1, 2, 3])
b = torch.tensor([4, 5, 6])
print(a)
print(b)# 逐元素加法
print(a + b)# 逐元素减法
print(a - b)# 逐元素乘法
print(a * b)# 逐元素除法
print(a / b)

3. 矩阵乘法

对于 2 维张量(矩阵),可以进行矩阵乘法。

A = torch.tensor([[1, 2], [3, 4],[5,6]])
B = torch.tensor([[5, 6], [7, 8]])
print(A)
print(B)# 矩阵乘法(@ 操作符)
C = A @ B
print(C)

矩阵乘法的结果会是两个矩阵的行与列相乘求和后的结果。

4. 广播机制(Broadcasting)

当张量的形状不同,但可以通过扩展成兼容的形状进行运算时,PyTorch 会自动应用广播机制。广播是为了避免手动调整张量形状,使得小尺寸的张量与大尺寸张量进行兼容的运算。

x = torch.tensor([1, 2, 3])
y = torch.tensor([[1], [2], [3]])
print(x)
print(y)# 逐元素相加,广播机制会将 y 扩展为 [3,3] 的大小
print(x + y)

5. 张量的维度操作

可以对张量的维度进行变换,如改变形状、添加或移除维度。

改变张量形状(Reshape)
tensor = torch.tensor([[1, 2, 3], [4, 5, 6]]) # (2 ,3)
print(tensor)
reshaped_tensor = tensor.view(3, 2)  # 改变形状为 (3, 2)
print(reshaped_tensor)
添加和移除维度
# 添加维度
tensor = torch.tensor([1, 2, 3])
print(tensor)
tensor_unsqueeze = tensor.unsqueeze(0)  # 在第0维添加一个维度
print(tensor_unsqueeze)# 移除维度
tensor_squeeze = tensor_unsqueeze.squeeze()  # 移除多余的1维
print(tensor_squeeze)

6. 线性代数运算

张量支持各种线性代数运算,如矩阵转置、矩阵求逆、矩阵分解等。

矩阵转置
A = torch.tensor([[1, 2], [3, 4]])
print(A)
A_transposed = A.T  # 或者使用 A.transpose(0, 1)
print(A_transposed)
矩阵求逆
A = torch.tensor([[1.0, 2.0], [3.0, 4.0]])
print(A)
A_inverse = torch.inverse(A)
print(A_inverse)
矩阵行列式
A = torch.tensor([[1.0, 5.0], [3.0, 4.0]])
print(A)
det_A = torch.det(A)
print(det_A)

7. 自动微分

PyTorch 中的张量可以通过设置 requires_grad=True 来启用自动微分功能。在反向传播时,PyTorch 会自动计算梯度。

# 创建张量并启用梯度
x = torch.tensor(2.0, requires_grad=True)# 定义一个简单的函数
y = x ** 2# 计算梯度(反向传播)
y.backward()# 查看梯度(dy/dx)
print(x.grad)  # 输出为 4.0

8. 随机数生成

张量可以通过多种方式生成随机数。

# 生成标准正态分布的随机数
random_tensor = torch.randn(3, 3)
print(random_tensor)# 生成均匀分布的随机数
uniform_tensor = torch.rand(3, 3)
print(uniform_tensor)

9. GPU 加速计算

PyTorch 支持将张量移动到 GPU 上进行加速计算。

# 检查是否有可用的 GPU
if torch.cuda.is_available():device = torch.device('cuda')tensor = torch.tensor([1.0, 2.0, 3.0], device=device)print(tensor)

总结

张量是多维数组的泛化,广泛应用于深度学习和数值计算。通过基本的算术操作、线性代数运算、维度操作等,我们可以高效地处理大规模数据。同时,PyTorch 还支持自动微分和 GPU 加速,这使得它在深度学习领域非常流行。


http://www.ppmy.cn/ops/114889.html

相关文章

Redis中Hash(哈希)类型的基本操作

文章目录 一、 哈希简介二、常用命令hsethgethexistshdelhkeyshvalshgetallhmgethlenhsetnxhincrbyhincrbyfloathstrlen 三、命令小结四、哈希内部编码方式五、典型应用场景六、 字符串,序列化,哈希对比 一、 哈希简介 几乎所有的主流编程语言都提供了哈…

【学习笔记】 AD24中元器件重叠系统不报错的解决方案(消除报错)

【学习笔记】 AD24中PCB设计元器件重叠后系统不报错的解决方案(如何主动屏蔽报错) 一、Component Clearance未开启使能的解决方案二、最小水平间距设置错误的解决方案三、未开启设计规则检查的解决方案四、设计规则检查中 “在线”和“批量”的含义五、为…

快递物流单号识别API接口DEMO下载

单号识别API为用户提供单号识别快递公司服务,依托于快递鸟大数据平台,用户提供快递单号,即可实时返回可能的一个或多个快递公司,存在多个快递公司结果的,大数据平台根据可能性、单号量,进行智能排序。 应用…

EI-Bisynch协议

EI-Bisynch(Extended Interface-Bisynchronous)协议是一种早期用于设备通信的协议,主要用于工业控制系统中的串行通信。随着技术的发展,EI-Bisynch的使用已经大幅减少,逐渐被更现代化、灵活性更高的通信协议&#xff0…

【算法】最长公共子序列(C/C++)

最长公共子序列(LCS,Longest Common Subsequence)问题简称(LCS),是动态规划里面里面的基础算法。它的所解决的问题是,在两个序列中找到一个序列,使得它既是第一个序列的子序列&#…

vue3 axios ant-design-vue cdn的方式使用

1、vue3 快速上手 | Vue.js <script src"https://unpkg.com/vue3/dist/vue.global.js"></script><div id"app">{{ message }}</div><script>const { createApp, ref } VuecreateApp({setup() {const message ref(Hello …

JAVA的函数式接口是啥?

函数式接口 1. 函数式接口的由来 ​ 我们知道使用Lambda表达式的前提是需要有函数式接口&#xff0c;而Lambda表达式使用时不关心接口名&#xff0c;抽象方法名。只关心抽象方法的参数列表和返回值类型。因此为了让我们使用Lambda表达式更加的方法&#xff0c;在JDK中提供了大…

中小企业体系技术抽象沉淀-异地灾备篇

IT团队内部使用工具 系列文章&#xff1a;https://blog.csdn.net/caicongyang/article/details/136857045 DDL DML管控 https://github.com/hhyo/Archery/ flyway 文档编写 wiki 技术对外输出文档推荐gitbook 同城双活数据同步方案 总览&#xff1a; vivo 系列文章&#x…