什么是张量?深度学习中的核心概念详解
创作时间:
作者:
@小白创作中心
什么是张量?深度学习中的核心概念详解
引用
CSDN
1.
https://blog.csdn.net/2301_76924624/article/details/141195792
张量的基础概念
在学习使用PyTorch库进行深度学习网络搭建时,张量(Tensor)这个词总是会频繁出现。实际上,PyTorch中的所有操作都是基于张量进行的。根据PyTorch官网的介绍,一个Tensor是一个包含单一数据类型的多维矩阵。
通常,其多维特性可以用三维及以上的矩阵来描述,例如:
- 单个元素为标量(scalar)
- 一个序列为向量(vector)
- 多个序列组成的平面为矩阵(matrix)
- 多个平面组成的立方体为张量(tensor)
需要注意的是,张量并不严格限制在三维及以上,也有一维张量和二维张量。
简单来说,可以把张量理解成数组,只不过里面的数据类型比较特殊。几维张量就相当于最外层数组包含几层[]。
为什么深度学习要使用Tensor
在监督机器学习中,模型的输入X通常是多个特征列组成的二维矩阵,输出y是单个特征列组成的标签向量或多个特征列组成的二维矩阵。那么,在深度学习中,为何要定义多维矩阵Tensor呢?
深度学习当前最成熟的两大应用方向是计算机视觉(CV)和自然语言处理(NLP)。其中:
- CV面向图像和视频,标准输入数据集至少是三维以上。例如,图像数据集至少包含三个维度(样本数Nx图像高度Hx图像宽度W)。如果是彩色图像,则还需增加一个通道C,包含四个维度(NxHxWxC)。如果是视频帧,可能还需要增加一个维度T,表示将视频划分为T个等时长的片段。
- NLP面向语音和文本,标准输入数据集也是三维以上。例如,文本数据集包含三个维度(样本数N×序列长度L×特征数H)。
因此,输入到深度学习模型的数据结构通常都要三维以上,这也就促使了Tensor的诞生。
Tensor数据类型
Tensor的数据类型可以参考下图:
张量的每种数据类型都有对应CPU和GPU版本,因此进行张量处理的时候需要指定一个设备,它要么是CPU要么是GPU。我们可以用torch.device
来创建一个设备,并指定索引,例如:
device = torch.device('cuda:0')
输出结果为:device(type='cuda',index=0)
,表示类型为'cuda',即GPU,索引0表示为第一个GPU。
Tensor形状
张量具有以下形状属性:
Tensor.ndim
:张量的维度,例如向量的维度为1,矩阵的维度为2。Tensor.shape
:张量每个维度上元素的数量。Tensor.shape[n]
:张量第n维的大小。第n维也称为轴(axis)。Tensor.numel
:张量中全部元素的个数。
创建一个四位张量Tensor:
Tensor = torch.ones([2,3,4,5])
它的属性axis、shape、dimension、ndim之间关系如下图所示:
Tensor创建
PyTorch提供了多种方式来创建Tensor:
1. 使用torch.tensor()
import numpy as np
import torch
arr = np.ones((3, 3))
print(arr)
# [[1. 1. 1.]
# [1. 1. 1.]
# [1. 1. 1.]]
print("ndarray的数据类型:", arr.dtype)
# ndarray的数据类型: float64
t = torch.tensor(arr)
print(t)
# tensor([[1., 1., 1.],
# [1., 1., 1.],
# [1., 1., 1.]], dtype=torch.float64)
2. 从numpy创建Tensor -> torch.from_numpy(ndarray)
import numpy as np
import torch
# 创建一个numpy数组
numpy_array = np.array([[1, 2, 3], [4, 5, 6]])
# 从numpy数组创建一个Tensor,并保持数据共享
tensor_from_numpy = torch.from_numpy(numpy_array)
print(tensor_from_numpy)
# tensor([[1, 2, 3],
# [4, 5, 6]], dtype=torch.int32)
# 修改tensor,array也会被修改
print("# -----------修改tensor--------------*")
t[0, 0] = -1
print("numpy array: ", arr)
# numpy array: [[-1 2 3]
# [ 4 5 6]]
print("tensor : ", t)
# tensor([[-1, 2, 3],
# [4, 5, 6]], dtype=torch.int32)
3. 根据数值创建张量
torch.zeros()
:根据size创建全0张量torch.zeros_like()
:根据input形状创建全0张量torch.full()
&torch.full_like()
:创建自定义某一数值的张量torch.linspace()
:创建均分的一维张量torch.logspace()
:创建对数均分的一维张量torch.arange()
:创建等差的一维张量torch.eye()
:创建单位对角矩阵
4. 根据概率创建张量
torch.normal()
:生成正态分布(高斯分布)
torch.normal(mean, std, *, generator=None, out=None)
热门推荐
2024中国职场人健康保障意识报告解读
高端LOGO设计如何通过动态效果增强吸引力
罗隐:十次科举不第的唐代诗人
黑塞:无法再忍受生活时,去聆听树的语言
柿子和香蕉可以一起吃吗
“下降三角形”形态该如何交易?我这里有个好用的策略方法
中秋节摆放供果有讲究:5放3不放,老传统不能忘
Z世代的emoji新玩法:从放声大哭到骷髅头,这些表情包你真的懂吗?
三国时期的人才荟萃:历史背景与文化因素的交响曲
电动自行车上牌全攻略:预约流程、所需材料及使用规定详解
席卷全球的YOASOBI与来自日本的"Gacha Pop"潜力
猎杀先锋:二战德军一号坦克歼击车的战场生涯
探索大型语言模型(LLM)在人类性格个性评估(MBTI)中的前景与应用
济南人去四川旅游攻略
4步教你挑选完美咖啡豆:从处理法到烘焙度的全面指南
泉城花灯璀璨,火树银花迎新春
中国十大顶级名汤:细品华夏汤饮文化的博大精深
生信算法7 - 核酸序列Fasta和蛋白PDB文件读写与检索
电脑浏览器老是验证网页的解决办法
我国本土常见十大燕子,你小时候都见过吗?
经历何种人生困境,方能迎来大彻大悟的蜕变?
探访云水谣古镇,领略东方古堡别具一格的美学韵味。
警惕新型肠道病毒EV-D68,潜在“儿童杀手”
人工智能在艺术创作中的应用,是否能够替代人类艺术家?
角蛋白洗发水使用全指南:正确方法及注意事项详解
心理咨询的必要性
“国家队”下场买房,新一轮去库存开始了?
永胜县:多措并举提升教育教学质量
王菲唱的不是歌儿,而是自我救赎与修行!
黄金白银价格变化及金银比探究