tensorflow 零基础吃透:不规则维度 vs 均匀维度(RaggedTensor 核心概念)

零基础吃透:不规则维度 vs 均匀维度(RaggedTensor核心概念)

这份内容会把「不规则维度、均匀维度」以及 RaggedTensor 形状相关的核心概念,用通俗比喻+实例拆解讲清楚,帮你彻底理解 RaggedTensor 的维度规则和形状表示。

一、核心定义:不规则维度 vs 均匀维度(先认清楚)

维度的"规则/不规则",本质是「该维度下的所有切片长度是否一致」------可以用"切蛋糕"比喻理解:

  • 把张量想象成一块蛋糕,"维度"就是切蛋糕的方向(比如先横切、再竖切);
  • "切片"就是某一个方向下切出来的小块;
  • 若同一方向的所有小块大小(长度)都一样 → 均匀维度;若不一样 → 不规则维度。

1. 均匀维度(Uniform Dimension)

✅ 定义:该维度下的所有切片长度完全相同 (切出来的小块大小都一样)。

✅ 例子:

普通张量 [[1,2],[3,4],[5,6]] 的两个维度都是均匀的:

  • 维度0(行方向):3个切片(3行),每个切片长度都是2(列数);
  • 维度1(列方向):2个切片(2列),每个切片长度都是3(行数)。

2. 不规则维度(Ragged Dimension)

❌ 定义:该维度下的切片长度各不相同 (切出来的小块大小不一样)。

❌ 核心例子(文档原版):

python 复制代码
rt = tf.ragged.constant([[3, 1, 4, 1], [], [5, 9, 2], [6], []])
  • 维度0(最外层,行方向):5个切片(5行),这是均匀维度(因为"有5行"这个数量是固定的,切片数固定=5);
  • 维度1(内层,列方向):每个行切片的长度分别是4、0、3、1、0 → 长度不一致 → 这是不规则维度

关键对比表

维度类型 核心特征 通俗例子
均匀维度 同维度下所有切片长度相同 全班50个学生,每人都有3支笔
不规则维度 同维度下切片长度不同 全班50个学生,有人有2支笔、有人有5支、有人0支

二、RaggedTensor 的维度规则(必记!)

规则1:最外层维度永远是均匀维度

✅ 原因:最外层维度的"切片"只有1个(就是整个张量本身),"只有1个切片"就不存在"长度不同"的可能,因此必然是均匀的。

✅ 例子验证:

  • 文档里的 rt = [[3,1,4,1], [], [5,9,2], [6], []]:最外层维度长度=5(5行),是固定值 → 均匀;
  • 句子嵌入张量 [num_sentences, (num_words), embedding_size]:最外层 num_sentences(句子数)是固定值(比如3个句子)→ 均匀。

规则2:除最外层外,其余维度可规则/可不规则

RaggedTensor 支持"混合维度"(部分均匀、部分不规则),也支持"多个不规则维度":

场景1:混合维度(1个不规则 + 2个均匀)

✅ 例子:句子单词嵌入张量 [num_sentences, (num_words), embedding_size]

  • 维度0(num_sentences):均匀(比如3个句子,数量固定);
  • 维度1(num_words):不规则(每个句子的单词数不同);
  • 维度2(embedding_size):均匀(每个单词的嵌入向量都是4维,维度固定)。
场景2:多个不规则维度

✅ 例子:结构化文本文档张量 [num_documents, (num_paragraphs), (num_sentences), (num_words)]

  • 维度0(num_documents):均匀(比如2篇文档,数量固定);
  • 维度1(num_paragraphs):不规则(每篇文档的段落数不同);
  • 维度2(num_sentences):不规则(每个段落的句子数不同);
  • 维度3(num_words):不规则(每个句子的单词数不同)。

补充:RaggedTensor 的"秩"(总维数)

和普通 tf.Tensor 一样,RaggedTensor 的秩 = 总维度数(不管是均匀还是不规则维度,都算一个维度):

  • 例子1:[[Hi], [How,are,you]] → 秩=2(2个维度:行+列);
  • 例子2:文档张量 [num_documents, (num_paragraphs), (num_sentences), (num_words)] → 秩=4(4个维度)。

三、RaggedTensor 的形状表示(3种方式)

描述 RaggedTensor 形状时,有3种核心方式,重点区分「逻辑形状」「shape属性」「bounding_shape」:

方式1:惯例写法(逻辑形状)------ 括号标不规则维度

✅ 规则:用 () 把不规则维度的名称括起来,直观区分规则/不规则;

✅ 例子:

  • 句子张量 [[Hi], [How,are,you]] → 逻辑形状 [2, (3)](2是均匀维度,3是不规则维度的最长长度);
  • 单词嵌入张量 → 逻辑形状 [num_sentences, (num_words), embedding_size]

方式2:RaggedTensor.shape 属性 ------ 不规则维度用 None 表示

✅ 规则:返回 tf.TensorShape 对象,均匀维度显示具体长度,不规则维度显示 None (因为长度不固定);

✅ 例子(文档原版):

python 复制代码
rt = tf.ragged.constant([["Hi"], ["How", "are", "you"]])
print(rt.shape)  # 输出:TensorShape([2, None])
  • 解释:维度0(行)长度=2(均匀)→ 显示2;维度1(列)不规则 → 显示None。

方式3:bounding_shape() 方法 ------ 紧密边界形状(补到最长长度)

✅ 规则:返回"把所有不规则维度补到该维度最长长度"后的形状(即"如果把 RaggedTensor 转成普通张量,需要补0到多大");

✅ 例子(文档原版):

python 复制代码
rt = tf.ragged.constant([["Hi"], ["How", "are", "you"]])
print(rt.bounding_shape())  # 输出:tf.Tensor([2 3], shape=(2,), dtype=int64)
  • 解释:维度0长度=2(不变),维度1的最长长度=3(第二个句子有3个词)→ 边界形状是 [2,3]。

三种形状表示对比表

表示方式 例子([[Hi], [How,are,you]]) 核心含义
惯例写法(逻辑) [2, (3)] 直观标不规则维度
rt.shape TensorShape([2, None]) 不规则维度用None标记
rt.bounding_shape() [2, 3] 补0后的最小普通张量形状

四、核心总结(避坑关键点)

  1. 维度的"规则/不规则"看「同维度下切片长度是否一致」,和"是不是最外层"无关;
  2. RaggedTensor 最外层必是均匀维度(只有1个切片,无长度差异),内层可规则/可不规则;
  3. 形状表示:
    • 逻辑写法:括号标不规则维度;
    • shape 属性:None 代表不规则维度;
    • bounding_shape:不规则维度取最长长度,得到"最小普通张量形状";
  4. 秩(总维数):不管规则/不规则,有几个维度就是几秩(和普通张量一致)。

小练习(验证理解)

已知 RaggedTensor:rt = tf.ragged.constant([[[1,2], [3]], [[4,5,6]]])

  1. 维度0(最外层):长度=2 → 均匀维度;
  2. 维度1(中层):切片长度=2、1 → 不规则维度;
  3. 维度2(内层):切片长度=2、1、3 → 不规则维度;
  4. rt.shape → TensorShape([2, None, None]);
  5. rt.bounding_shape() → [2, 2, 3]。

如果能答对,说明核心概念已经吃透了~

相关推荐
秋刀鱼 ..2 小时前
2026年工业物联网与信息技术国际学术会议(IIoTIT 2026)
人工智能·深度学习·神经网络·物联网·机器学习·人机交互
陈老老老板2 小时前
让AI替你写爬虫:基于自然语言的 AI Scraper Studio 实战解析
人工智能·爬虫
南极星10052 小时前
OPENCV(python)--初学之路(十六)SURF简介
python·opencv·算法
Q_Q5110082852 小时前
python+django/flask+vue基于深度学习的图书推荐系统
spring boot·python·django·flask·node.js·php
sugar椰子皮2 小时前
【爬虫框架-5】实现一下之前的思路
开发语言·爬虫·python
song5012 小时前
鸿蒙 Flutter 图像编辑:原生图像处理与滤镜开发
图像处理·人工智能·分布式·flutter·华为·交互
这张生成的图像能检测吗2 小时前
(论文速读)基于高阶自适应曲线的视觉失衡缺陷多模态无监督图像增强方法CLIP-AE
图像处理·人工智能·计算机视觉·卷积神经网络·低照度图像增强
老蒋新思维2 小时前
创客匠人万人峰会落幕:AI 智能体如何重塑知识变现的效率革命
大数据·人工智能·重构·创始人ip·创客匠人·知识变现
码界奇点2 小时前
基于Flask与Vue.js的百度网盘自动转存系统设计与实现
vue.js·python·flask·自动化·毕业设计·源代码管理