什么是张量

张量的基础概念

学习使用pytorc库进行深度学习网络搭建时,张量这个词总是不定时会出现。其实,Pytorch中的所有操作都是在张量的基础上进行的,今天就来了解张量到底是什么

由PyTorch官网官网介绍可知,一个Tensor是一个包含单一数据类型的多维矩阵。

通常,其多维特性用三维及以上的矩阵来描述,例如下图所示:单个元素为标量(scalar),一个序列为向量(vector),多个序列组成的平面为矩阵(matrix),多个平面组成的立方体为张(tensor)。PS:张量也无需严格限制在三维及以上才叫张量,也有一维张量、二维张量

直白话:其实就把张量理解成数组就行,只不过里面的数据类型比较特殊,因此,几维张量外面就相当于最外层数组包含几层

为什么深度学习要使用Tensor

监督机器学习模型的输入X通常是多个特征列组成的二维矩阵,输出y是单个特征列组成的标签向量或多个特征列组成的二维矩阵。那么深度学习中,为何要定义多维矩阵Tensor呢?

深度学习当前最成熟的两大应用方向莫过于CV和NLP,其中CV面向图像和视频,NLP面向语音和文本,二者分别以卷积神经网络和循环神经网络作为核心基础模块,且标准输入数据集都是至少三维以上。其中,

  • 图像数据集:至少包含三个维度(样本数Nx图像高度Hx图像宽度W);如果是彩色图像,则还需增加一个通道C,包含四个维度(NxHxWxC);如果是视频帧,可能还需要增加一个维度T,表示将视频划分为T个等时长的片段。

  • 文本数据集:包含三个维度(样本数N×序列长度L×特征数H)。

因此,输入学习模型的输入数据结构通常都要三维以上,这也就促使了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.shapen:张量第n维的大小。第n维也称为轴(axis)。

  • Tensor.numel:张量中全部元素的个数。

创建一个四位张量Tensor

复制代码
Tensor=torch.ones([2,3,4,5])

它的属性axis、shape、dimension、ndim之间关系如下图所示。

Tensor创建

Pytorch可基于给定数据手动创建Tensor,并提供了多种方式

  • torch.tensor()

import numpy as np

import torch

arr = np.ones((3, 3))

'''

\[1. 1. 1.

1. 1. 1.

1. 1. 1.\]

'''

print(arr)

ndarray的数据类型: float64

print("ndarray的数据类型:", arr.dtype)

t= torch.tensor(arr)

'''

tensor(\[1., 1., 1.,

1., 1., 1.,

1., 1., 1.], dtype=torch.float64)

'''

print(t)

  • 从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内容会同时改变numpy数组)

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--------------*")

t0, 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)

  • 根据数值创建张量

**1.**torch.zeros():根据size创建全0张量

复制代码
torch.zeros(*size, out=None, dtype=None, layout=torch.strided, device=None, requires_grad=False)
  1. torch.zeros_like:根据input形状创建全0张量

    torch.zeros_like(input, dtype=None, layout=None, device=None, requires_grad=False, memory_format=torch.preserve_format)

此外 还有一些如下:

  1. torch.full() & torch.full_like():创建自定义某一数值的张量。

  2. torch.linspace():创建均分的一维张量

5.torch.logspace():创建对数均分的一维张量

6.torch.arrange():创建等差的一维张量

  1. torch.eye():创建单位对角矩阵
  • 根据概率创建张量

1.torch.normal():生成正态分布(高斯分布)

复制代码
torch.normal(mean, std, *, generator=None, out=None)
相关推荐
hhzz6 小时前
基于监控视频的水位尺自动识别技术方案与实现
python·opencv·yolo·图像识别·cv
yongche_shi6 小时前
ragas官方文档中文版(五十)
开发语言·python·ai·ragas·如何评估和改进 rag 应用
weixin_408099677 小时前
OCR批量识别图片方案:从手动处理到自动化API系统(Python/Java/PHP实战)
图像处理·python·ocr·文字识别·api调用·批量识别·石榴智能
AI行业学习7 小时前
Notepad++ 官方下载 + 完整安装 + 全套优化配置(2026最新)
开发语言·人工智能·python·前端框架·html·notepad++
Token炼金师8 小时前
幂律的预言:Kaplan 与 Chinchilla 的算力账本 —— Scaling Laws 与最优配比
人工智能·深度学习·大模型架构·kv cache·scaling laws
大圣编程8 小时前
Python中continue语句的用法是什么?
开发语言·前端·python
云烟成雨TD8 小时前
LangFlow 1.x 系列【5】可视化编辑页面功能说明
人工智能·python·agent
geovindu10 小时前
python: Functional Options Pattern
开发语言·后端·python·设计模式·惯用法模式·函数式选项模式
tryCbest10 小时前
Python 文件操作
服务器·python
涛声依旧-底层原理研究所11 小时前
Agent 长任务可靠性设计:实现暂停、恢复、续跑与崩溃重启的完整方案
人工智能·python·系统架构