PyTorch——从入门到精通:PyTorch基础知识(张量)【PyTorch系统学习】

server/2024/11/18 10:29:32/

什么是张量(Tensor)

      ​ 张量在数学中是一个代数对象,描述了与矢量空间相关的代数对象集之间的多重线性映射。张量是向量和矩阵概念的推广,可以理解为多维数组。作为数学中的一个基本概念,张量有着多种类型,包括但不限于标量、矢量、矩阵以及矢量空间之间的多重线性映射等。张量的不同类型对应于不同的阶数,其中标量是0阶张量,矢量是1阶张量,矩阵是2阶张量,而更高阶的张量则可以表示更复杂的关系和结构。

张量维度代表含义

0维张量

代表的是标量(数字)

1维张量

代表的是向量

2维张量

代表的是矩阵

3维张量

时间序列数据 股价 文本数据 单张彩色图片(RGB)

        张量在物理学、工程学、计算机科学等多个领域中都有广泛的应用,特别是在机器学习和深度学习中,张量是一个核心概念,被广泛用于表示和操作图像、文本和时间序列等复杂数据结构。深度学习框架如 TensorFlow 和 PyTorch 就是以张量为核心数据结构,提供了丰富的张量操作函数,使得模型训练和推理变得更加高效和便捷。

PyTorch张量基础操作

        由于我们的代码是建立在PyTorch的基础上的,因此首先需要导入torch包,这也是我们后续代码的基础。

import torch

创建张量

        1.标量:简单的一个数字,只有大小,没有方向的量.

# 根据现有数字创建标量,并进行简单的运算操作
x = torch.tensor(3.0)
y = torch.tensor(2.0)x + y, x - y, x * y, x / y, x**y

        2.向量:既有大小,又有方向的量。

# 从列表创建张量
tensor_from_list = torch.tensor([1, 2, 3, 4])# 使用arange生成一个从起始值到结束值(不包括结束值)的等差数列张量,1为其步长
tensor_arange = torch.arange(0, 10, 1)# 使用linspace创建张量,同样需要开始值和结束值参数,以及生成的数值个数
tensor_linspace = torch.linspace(0, 100, steps=5)

        3.矩阵:由行和列组成的数组。

# 特定数字的张量,全零张量
zeros_tensor = torch.zeros((2, 3))  # 2行3列# 全一张量
ones_tensor = torch.ones((3, 3))  # 3行3列# 随机数字张量
random_tensor = torch.rand((4, 3))  # 4行3列随机数# 单位矩阵
identity_tensor = torch.eye(3)  # 3x3单位矩阵# 创建与a相同形状的全零张量
a = torch.tensor([[1, 2], [3, 4]])
zeros_like_a = torch.zeros_like(a)

        4.高阶张量

# 直接使用数据创建
tensor = torch.tensor([[[1, 2, 3], [4, 5, 6], [7, 8, 9]],[[10, 11, 12], [13, 14, 15], [16, 17, 18]],[[19, 20, 21], [22, 23, 24], [25, 26, 27]]
])  # 创建一个3x3x3的高阶张量# 使用arange、linespace、zeros创建,如:
tensor_arange=tensor.arange((1,2,3,3)) # 1x2x3x3的高阶张量

张量运算

        元素级运算

        加、减、乘、除、幂运算

a = torch.tensor([[1, 2], [3, 4]])
b = torch.tensor([[5, 6], [7, 8]])a + b, a - b, a * b, a / b, a ** b, torch.pow(a, 2)  # 加、减、乘、除、指数、每个元素平方

        广播机制

        广播机制可以自动扩展小张量与大张量进行运算,这种机制的工作方式如下:1.通过适当复制元素来扩展一个或两个数组,以便在转换之后,两个张量具有相同的形状;2.对生成的数组执行按元素操作。

a = torch.tensor([[1], [2], [3]]) # 形状(1,3)
b = torch.tensor([10, 20])  # 形状(2,2)a + b  # 相加后的形状为(2,3)

        线性代数运算

# 矩阵乘法
a = torch.tensor([[1, 2], [3, 4]])
b = torch.tensor([[5, 6], [7, 8]])
matmul_result = torch.matmul(a, b)
print("矩阵乘法结果:", matmul_result)# 转置
transpose_result = a.T
print("转置结果:", transpose_result)# 逆矩阵
square_tensor = torch.tensor([[4.0, 7.0], [2.0, 6.0]])
inv_tensor = torch.inverse(square_tensor)
print("逆矩阵结果:", inv_tensor)

        形状操作

# 对现有的张量重塑形状,这种方式也能够用于创建高阶张量
reshaped_tensor = tensor.arange(0,10,1)reshape((2, 5))  # 将向量调整为2x5的矩阵# 将向量展开为一维
a=tensor.zeros((2,2,3))
flattened_tensor = a.flatten()  # 展开为一维# 张量的拼接,这种方式也能够用于创建高阶张量
a = torch.tensor([[1, 2], [3, 4]])
b = torch.tensor([[5, 6]])
concatenated_tensor = torch.cat([a, b], dim=0)  # 沿第0维拼接
print("拼接结果:", concatenated_tensor)# 拆分张量
split_tensors = torch.chunk(a, 2, dim=0)  # 沿第0维拆分为2部分
print("拆分结果:", split_tensors)# 增加维度
a = torch.tensor([1, 2, 3])
expanded_tensor = a.unsqueeze(0)  # 在第0维增加维度
print("增加维度结果:", expanded_tensor)# 减少维度
a = torch.tensor([[[1, 2], [3, 4]]])
squeezed_tensor = a.squeeze()  # 删除维度为1的轴
print("减少维度结果:", squeezed_tensor)

        张量的统计运算

# 求和、求积
a = torch.tensor([[1, 2], [3, 4]])
sum_result = torch.sum(a)  # 所有元素求和
prod_result = torch.prod(a)  # 所有元素求积
print("求和结果:", sum_result)
print("求积结果:", prod_result)# 最大值、最小值
max_result = torch.max(a)  # 最大值
min_result = torch.min(a)  # 最小值
print("最大值:", max_result)
print("最小值:", min_result)# 按维度聚合
sum_along_dim = torch.sum(a, dim=0)  # 按列求和
print("按维度求和结果:", sum_along_dim)

感谢阅读,希望对你有所帮助~


http://www.ppmy.cn/server/142882.html

相关文章

cache size = 16 bytes, cache line size = 4 bytes, direct-mapped cache

当 cache size 16 bytes 且 cache line size 4 bytes,并且是 direct-mapped cache (直接映射缓存) 时,可以根据以下规则配置缓存: 1. 基本计算 总缓存大小 16 bytes(整个缓存可以存储的字节数)。Cache line 大小 …

智能购物时代:AI在电商平台的革命性应用

在当今数字化时代,人工智能(AI)技术已成为推动电商行业发展的关键力量。AI技术的应用不仅改变了电商的运营模式,还极大地丰富了消费者的购物体验。随着技术的不断进步,AI在电商领域的应用越来越广泛,从个性…

基于OpenCV的自制Python访客识别程序

这是我用Pyqt5,基于OpenCV做的一个Python访客识别程序,它具体包括如下5个功能: 1、选择媒体菜单,可以打开本地摄像头;如果知道rtsp地址,则可以直接访问局域网内的网络串流。 2、选择播放菜单,…

【大数据测试HDFS + Flask详细教程与实例】

大数据测试HDFS Flask 1. 环境准备安装工具安装Hadoop(以单机模式为例)安装Flask和HDFS Python客户端 2. HDFS Flask基本架构基本文件结构 3. 创建Flask应用与与HDFS交互步骤1:配置HDFS连接步骤2:构建Flask应用 4. 创建前端界面…

深度学习和图像处理

看来你对深度学习和图像处理很感兴趣呢,让我来一一解答你的疑惑吧。 深度学习高纬度特征 首先,我猜你是想问“深度学习中的高维特征”吧。在深度学习中,随着网络层数的加深,网络的感受野逐渐变大,语义表达能力也随之增…

moduo之阻塞队列BlockingQueue和BoundedBlockingQueue

简介 moduo中的队列与java线程池中的队列类似, 有无界阻塞队列和有界阻塞队列 结构 #mermaid-svg-Gf8nET825tZgzVRM {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-Gf8nET825tZgzVRM .error-icon{fill…

虚幻引擎 CEO 谈元宇宙:发展、策略与布局

在当今科技领域,元宇宙无疑是最热门的话题之一。Epic Games 首席执行官 Tim Sweeney 对元宇宙的未来发展充满信心,他认为开放元宇宙将融合娱乐、游戏和科技产业,带来一个光明的未来。本文将深入探讨采访中的关键内容,分析元宇宙的…

rhce.6

一、DNS域名解析服务器 DNS ( Domain Name System )是互联网上的一项服务,它作为将域名和 IP 地址相互映射的一个分布式数据库,能够使人更方便的访问互联网。DNS 系统使用的是网络的查询,那么自然需要有监听的 port 。…