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

相关推荐
AndrewHZ5 分钟前
【python与生活】如何用Python写一个简单的自动整理文件的脚本?
开发语言·python·生活·脚本·文件整理
binbinaijishu881 小时前
Python爬虫入门指南:从零开始的网络数据获取之旅
开发语言·爬虫·python·其他
Python代狂魔2 小时前
Redis
数据库·redis·python·缓存
做科研的周师兄3 小时前
【机器学习入门】1.2 初识机器学习:从数据到智能的认知之旅
大数据·数据库·人工智能·python·机器学习·数据分析·机器人
王小王-1234 小时前
基于Python的游戏推荐与可视化系统的设计与实现
python·游戏·游戏推荐系统·游戏可视化
KevinWang_4 小时前
让 AI 写一个给图片加水印的 Python 脚本
python
go&Python5 小时前
检索模型与RAG
开发语言·python·llama
阿里云大数据AI技术5 小时前
ODPS 十五周年实录 | Data + AI,MaxCompute 下一个15年的新增长引擎
大数据·python·sql
RainbowJie16 小时前
Gemini CLI 与 MCP 服务器:释放本地工具的强大潜力
java·服务器·spring boot·后端·python·单元测试·maven
能力越小责任越小YA6 小时前
服务器(Linux)新账户搭建Pytorch深度学习环境
人工智能·pytorch·深度学习·环境搭建