2-1 张量数据结构

张量概念

张量是什么?

单个元素叫标量(scalar),一个序列叫向量(vector),多个序列组成的平面叫矩阵(matrix),多个平面组成的立方体叫张量(tensor)。在深度学习中,标量、向量、矩阵、高维矩阵都统称为张量。在pytorch中,一个Tensor内部包含数据和导数两部分。

Pytorch的基本数据结构是张量Tensor。张量即多维数组。Pytorch的张量和numpy中的array很类似。

在Pytorch中,我们使用张量对模型的输入和输出以及模型的参数进行编码。最重要的是,数据转化为张量可以方便在GPU上运行,这样运行速度可以大大加快。

一、张量的数据类型(如何创建张量)

torch.float64(torch.double),
torch.float32(torch.float), 最常用

torch.float16,

torch.int64(torch.long),

torch.int32(torch.int),

torch.int16,

torch.int8,

torch.uint8,

torch.bool
可以直接使用指定类型

**也使用特定函数创建:**torch.IntTensor()、torch.tensor()(等价于torch.FloatTensor)、torch.BoolTensor()

注意:

torch.IntTensor(3)创建的张量并不是 tensor(3)或者tensor([3]),而是随机的三个整数

torch.Tensor()参数:

data:data的数据类型可以是列表list、元组tuple、numpy数组ndarray、纯量scalar(又叫标量)和其他的一些数据类型。

dtype:该参数可选参数,默认为None,如果不进行设置,生成的Tensor数据类型会拷贝data中传入的参数的数据类型,比如data中的数据类型为float,则默认会生成数据类型为torch.FloatTensor的Tensor。

device:该参数可选参数,默认为None,如果不进行设置,会在当前的设备上为生成的Tensor分配内存。

requires_grad:该参数为可选参数,默认为False,在为False的情况下,创建的Tensor不能进行梯度运算,改为True时,则可以计算梯度。

pin_memory:该参数为可选参数,默认为False,如果设置为True,则在固定内存中分配当前Tensor,不过只适用于CPU中的Tensor。

不同类型转换:

注意区分 torch.tensor 和 torch.Tensor:


所以说 torch.Tensor 等价于 torch.FloatTensor

二、张量维度

不同类型的数据可以用不同维度(dimension)的张量来表示。

标量为0维张量,向量为1维张量,矩阵为2维张量。

彩色图像有rgb三个通道,可以表示为3维张量。

视频还有时间维,可以表示为4维张量。

可以简单地总结为:有几层中括号,就是多少维的张量。

三、张量尺寸

可以使用 shape属性或者 size()方法查看张量在每一维的长度.

可以使用view方法改变张量的尺寸。

如果view方法改变尺寸失败,可以使用reshape方法.

四、张量和numpy数组

可以用numpy方法从Tensor得到numpy数组,也可以用torch.from_numpy从numpy数组得到Tensor。

这两种方法关联的Tensor和numpy数组是共享数据内存的。

如果改变其中一个,另外一个的值也会发生改变。

如果有需要,可以用张量的clone方法拷贝张量,中断这种关联。

此外,还可以使用item方法从标量张量得到对应的Python数值。

使用tolist方法从张量得到对应的Python数值列表。

tensor.add_(1) #给 tensor增加1,arr也随之改变 等价于: torch.add(tensor,1,out = tensor)

python 复制代码
#torch.from_numpy函数从numpy数组得到Tensor
arr = np.zeros(3) # 1*3 然后元素都是0
tensor = torch.from_numpy(arr)

# numpy方法从Tensor得到numpy数组
tensor = torch.zeros(3)
arr = tensor.numpy()

参考:https://github.com/lyhue1991/eat_pytorch_in_20_days

相关推荐
大连好光景7 分钟前
LSTM模型做分类任务2(PyTorch实现)
人工智能·pytorch·lstm
LeonDL1681 小时前
基于YOLO11深度学习的电梯内车辆识别系统【Python源码+Pyqt5界面+数据集+安装使用教程+训练代码】【附下载链接】
人工智能·python·深度学习·pyqt5·yolo数据集·yolo11深度学习·电梯内车辆识别系统
Sanlings1 小时前
ComfyUI+RX5700XT+Ubuntu25.04运行配置
pytorch·ai·comfyui·amd·rocm·rx5700xt·ubuntu25.04
拾心214 小时前
【云运维】Python基础(二)
python
fish_study_csdn6 小时前
Python内存管理机制
开发语言·python·c python
java1234_小锋8 小时前
[免费]基于Python的农产品可视化系统(Django+echarts)【论文+源码+SQL脚本】
python·信息可视化·django·echarts
Danceful_YJ8 小时前
31.注意力评分函数
pytorch·python·深度学习
程序员三藏9 小时前
快速弄懂POM设计模式
自动化测试·软件测试·python·selenium·测试工具·设计模式·职场和发展
循环过三天10 小时前
3.1、Python-列表
python·算法
青青草原羊村懒大王10 小时前
python基础知识三
开发语言·python