一文解读Tensor到底是个啥玩意儿?(附代码)

在线体验各类最新模型,更有模型 免费Token 额度领取!
立即体验
简介:

尽管理论上和实践中的张量(tensors)有一些细微差别,我们仍然能给出这样的定义:一个张量就是一个可以容纳N维数据及其线性操作的容器。

机器学习中的数据通常需要处理为数值型的。特别地,当我们特指神经网络中的数据表示时,通常会提到所谓的张量。一个张量就是一个可以容纳N维数据的容器。很多时候,人们会把它和matrix错误地混用(matrix特指2维的张量),张量是matrix在N维空间的一般形式。

数学上讲,张量不仅仅是一个数据容器,除了保存数值型数据,它也包括张量之间合法的线性变换。这种变换的例子如:叉积(cross product)和点积(dot product)。从计算机科学的角度看,把张量理解成面向对象中的对象而不是简单的一个数据结构会更有帮助。

(译者注:因为作者提到张量不仅包含数据,而且包含相应的操作,这与我们在面向对象编程中的约定是一致的,所以作者更建议理解成是对象。)

虽然上面的描述都是正确的,但理论上和机器学习实践中所指的张量还是会有细微差别。我们暂时简单地将他们视为数据结构,下图概括了张量和标量、向量跟矩阵的关系,以及如何用Numpy创建各种数据类型的代码。在随后的帖子中我们还会看看张量的变换。

1a3bd25a1bf5c6aa0bbd5dc30088fe82de9d2253

标量

单个数字就是一个标量。标量是一个0维的张量。因此,它具有0个轴,并且秩为0。

这就是细微差别出现的地方,尽管单个数字可以表示为张量,但并不是说它就应该是张量或者通常是张量。我们有足够的理由把数字视为张量(讨论张量的操作时会看到),但作为一种存储机制,这种表示会让人困惑。

下面的代码中,Numpy的多维数组ndarray被用来创建刚才讨论的示例结构。回忆一下,多维数组的ndim属性返回数组的维数。

import numpy as np

x = np.array(42)

print(x)

print('A scalar is of rank %d' %(x.ndim))

42

A scalar is of rank 0

向量

向量是1维的张量,在计算机科学中经常把它叫做数组。向量由一串数字组成,具有1个轴,并且秩为1。

x = np.array([1, 1, 2, 3, 5, 8])

print(x)

print('A vector is of rank %d' %(x.ndim))

[1 1 2 3 5 8]

A vector is of rank 1

矩阵

矩阵是秩为2的张量,即它有两个轴。在各种场景你都能熟悉这个概念,尤其是把数据喂给你的scikit-learn机器学习模型时。矩阵就是把数字放入网格内(想象行和列),是一个2维的张量。

x = np.array([[1, 4, 7],

[2, 5, 8],

[3, 6, 9]])

print(x)

print('A matrix is of rank %d' %(x.ndim))

[[1 4 7]

[2 5 8]

[3 6 9]]

A matrix is of rank 2

三维张量(及更高的维度)

严格来说,上述结构都是合法的张量。通常谈到张量时,都是将矩阵的概念推广到N>=3维。为了避免混淆,我们通常只把3维或更高维度的张量称为张量(通常而言,把标量‘42’称为张量没什么好处,只会让人困惑)。

x = np.array([[[1, 4, 7],

[2, 5, 8],

[3, 6, 9]],

[[10, 40, 70],

[20, 50, 80],

[30, 60, 90]],

[[100, 400, 700],

[200, 500, 800],

[300, 600, 900]]])

print(x)

print('This tensor is of rank %d' %(x.ndim))

[[[ 1 4 7]

[ 2 5 8]

[ 3 6 9]]

[[ 10 40 70]

[ 20 50 80]

[ 30 60 90]]

[[100 400 700]

[200 500 800]

[300 600 900]]]

This tensor is of rank 3

怎么用张量是你自己的事情。尽管如此,理解什么是张量以及它跟数字容器结构的关系现在应该很清楚了。


原文发布时间为:2018-06-13

本文作者:数据派

本文来自云栖社区合作伙伴“数据派THU”,了解相关信息可以关注“数据派THU”。

相关文章
|
5月前
|
人工智能 自然语言处理 安全
2026年阿里云无影云电脑OpenClaw(Clawdbot)一键部署全攻略,新手小白抄作业
2026年,OpenClaw(原Clawdbot、Moltbot)凭借“自然语言指令+主动执行任务”的核心能力,成为AI办公自动化的标杆工具,从文件管理、网页操作到多渠道联动,它能像“专属数字员工”一样,帮你搞定所有琐碎事务,彻底解放双手。但对零基础新手小白来说,传统部署方式中的环境配置、依赖安装、参数调试等操作,曾是难以跨越的门槛——直到阿里云无影云电脑推出OpenClaw(Clawdbot)专属一键部署方案,彻底打破了这一困境。
1064 16
|
存储 人工智能 编译器
【AI系统】昇腾数据布局转换
华为昇腾NPU采用独特的NC1HWC0五维数据格式,旨在优化AI处理器的矩阵乘法运算和访存效率。此格式通过将C维度分割为C1份C0,适应达芬奇架构的高效计算需求,支持FP16和INT8数据类型。此外,昇腾还引入了NZ分形格式,进一步提升数据搬运和矩阵计算效率。AI编译器通过智能布局转换,确保在不同硬件上达到最优性能。
1261 3
|
12月前
|
SQL 存储 数据库
SQL Server Management Studio (SSMS) 21 - 微软数据库管理工具
SQL Server Management Studio (SSMS) 21 - 微软数据库管理工具
1495 0
|
自然语言处理 API 数据库
2025年大模型就业:核心技术趋势、技能要求与职业发展全景解析
随着大语言模型(Large Language Models, LLMs)的技术飞速迭代,人工智能领域正经历从通用对话工具向高度智能化、任务导向的智能体(Agent)系统的深刻转型。到2025年4月,企业对掌握LLM相关技术的专业人才需求持续高涨,核心能力聚焦于检索增强生成(RAG)、智能体任务自动化、模型对齐优化以及多模态融合。本文将全面剖析2025年大模型就业市场的技术演进路径、核心技能要求、行业应用场景、推荐实践项目以及职业发展建议,旨在为从业者提供详尽的职业规划指南,帮助其精准把握行业机遇。
3071 6
|
自然语言处理 数据处理 Python
python操作和解析ppt文件 | python小知识
本文将带你从零开始,了解PPT解析的工具、工作原理以及常用的基本操作,并提供具体的代码示例和必要的说明【10月更文挑战第4天】
4577 60
|
数据采集 人工智能 自然语言处理
《深度融合:DeepSeek无缝嵌入现有业务系统全攻略》
在数字化转型中,企业利用人工智能提升效率和创新能力。DeepSeek作为强大的大语言模型,以其出色的推理能力为企业带来新机遇。集成DeepSeek需经过系统评估、需求分析和技术选型,选择API调用或私有化部署。通过接口对接、数据预处理和模型优化,逐步实现深度融合。最后,进行全面测试确保集成效果,为企业业务创新注入强大动力。
1360 0
|
Python
Python 项目及依赖管理工具技术选型
【8月更文挑战第30天】在进行Python项目及依赖管理时,有多种工具可供选择。虚拟环境工具有`virtualenv`和内置的`venv`,可为项目创建独立环境,避免依赖冲突。依赖管理工具有`pip`、`pipenv`和`poetry`,分别用于安装包、管理依赖并确保版本一致性。选型时需考虑项目需求、团队协作、易用性和社区支持等因素。
585 10
|
机器学习/深度学习 算法 数据处理
Data Masking:线上数据线下使用的数据处理方法
数据脱敏,Data Masking:线上数据线下使用的数据处理方法
385 4
Data Masking:线上数据线下使用的数据处理方法
|
Linux C语言 Python
perf_event_open 学习 —— 通过read的方式读取硬件技术器
perf_event_open 学习 —— 通过read的方式读取硬件技术器
|
机器学习/深度学习 人工智能 自然语言处理
《零基础实践深度学习》1.4.1飞桨产业级深度学习开源开放平台介绍
这篇文章详细介绍了飞桨(PaddlePaddle)这一产业级深度学习开源开放平台,阐述了其在深度学习领域的广泛应用和重要性,以及飞桨平台的核心框架、开发套件、工具组件和预训练模型等,旨在帮助开发者快速实现AI想法并推动产业智能化升级。