Tensor 的基本概念 建立方式 操作方式
2026/7/21 20:14:27 网站建设 项目流程

如有侵权或其他问题,欢迎留言联系更正或删除。

python 是编程语言,pycharm 是集成开发环境IDE,anaconda 是python包的管理工具

coding 环境优劣比较:

1)pycharm:优势:适用于大型项目,代码文件传递方便;劣势:需从头整体运行代码;

2)pycharm 命令行:优势:详细显示各变量属性,可运行任意行;劣势:不便于代码阅读修改;

3)jupyter:优势:便于代码修改、阅读,可运行任意行;劣势:需配置相应环境。

1. 张量(Tensor)概念
pytorch框架内的基础元素

张量:多维数组,它是标量(0维)、向量(1维)、矩阵(2维)的高维拓展

2. torch.tensor ( ) 方法

data : 数据,如:list、tuple、ndarray

grad : data 的梯度

grad_fn : 创建 Tensor 的 Function,是自动求导的关键

requires_grad : 指示是否需要梯度

is_leaf : 指示是否位叶子结点(张量)

dtype : 张量的数据类型,如:torch.FloatTensor、torch.cuda.FloatTensor

shape : 张量的形状,如:( 64, 3, 224, 224 )

device : 张量所在设备,GPU/CPU,是加速的关键

3. 创建tensor
直接创建

torch.tensor ( ):

torch.tensor( data, dtype=None, device=None, requires_grad=False, pin_memory=False)

torch.from_numpy (ndarray):

从 torch.from_numpy ( ) 创建的 tensor 与原 ndarray 共享内存,当修改其中一个的数据,另一个也将会被改动;

例题:写出下列代码的运行结果:(考察:共享内存)

import torch import numpy as np r = np.ones((3,3)) e = torch.from_numpy(r) r[0,2] = 9 print(e) e[2,2] = 7 print(r)

运行结果:

依据数值建立

torch.ones ( )、torch.zeros ( )、torch.full ( )

torch.ones_like ( )、torch.zeros_like ( )、torch.full_like ( )

依据概率分布建立
4. 张量操作
拼接与切分

1)torch.cat ( ) 功能:将张量按维度 dim 进行拼接

tensors : 张量序列、dim : 待拼接的维度

torch.cat(tensors,dim=0,out=None)

2)torch.stack ( ) 功能:在新创建的维度 dim 上进行堆积

tensors : 张量序列、dim : 待拼接的维度

torch.stack(tensors,dim=0,out=None)

注意区别:

torch.cat ( ) 不会使张量维度数量增加,仅改变具体维度值;而 torch.stack ( ) 会使维度数量增加

torch.cat ( )、torch.stack ( ) 中输入的 tensors 维度需一致

3)torch.chunk ( ) 功能:将张量按维度dim进行平均切分

返回值:张量列表

注意事项:若不能整除,最后一份张量小于其他张量

input : 待切分的张量、chunks : 待切分的份数、dim : 待切分的维度

torch.chunk(input,chunks,dim=0)

4)torch.split ( ) 功能:将张量按维度 dim 进行切分

返回值:张量列表

tensor :待切分的张量、dim : 待切分的维度

split_size_or_sections :为 int 时,表示每一份的长度;为 list 时,按 list 元素切分

torch.split(tensor,split_size_or_sections,dim=0)
张量索引

torch.masked_select ( ) 功能:按 mask 中的 True 进行索引

返回值:一维张量

input : 待索引的张量、mask : 与 input 同形状的布尔型张量

torch.masked_select(input,mask,out=None)
张量变幻

1)torch.reshape ( ) 功能:变换张量形状

注意事项:当张量在内存中是连续时,新张量与 input 共享数据内存

input : 待变换的张量、shape : 新张量的形状(shape内 "-1" 项:机器自行运算设置)

torch.reshape(input,shape)

2)torch.transpose ( ) 功能:交换张量的两个维度

input : 待变换的张量、dim0 : 待交换的维度、dim1 : 待交换的维度

torch.transpose(input,dim0,dim1)

3)torch.t ( ) 功能:2维张量转置,对矩阵而言,等价于:torch.transpose (input, 0, 1)

torch.t(input)

4)torch.squeeze ( )、torch.unsqueeze ( )

torch.squeeze()

作用:对张量进行「降维」,去掉那些尺寸为 1 的维度

dim 参数:不传时默认清除所有长度为 1 的轴;指定某一维度时,仅当该维度长度确实为 1 才会被移除,否则保持不变

torch.unsqueeze()

作用:对张量进行「升维」,在指定位置插入一个长度为 1 的新维度

dim 参数:用来指定新维度插入的位置索引

对应代码:

torch.squeeze(input, dim=None, out=None) torch.unsqueeze(input, dim, out=None)
张量数学运算
# 四则运算 torch.add() torch.addcdiv() torch.addcmul() torch.sub() torch.div() torch.mul() # 对数/指数 torch.log(input, out=None) torch.log10(input, out=None) torch.log2(input, out=None) torch.exp(input, out=None) torch.pow() # 三角函数/绝对值 torch.abs(input, out=None) torch.acos(input, out=None) torch.cosh(input, out=None) torch.cos(input, out=None) torch.asin(input, out=None) torch.atan(input, out=None) torch.atan2(input, other, out=None)

tip:

1)张量可直接与常数运算;2)形状(tensor.shape)一致的张量可直接相加;

3)张量相乘(广播机制)

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询