#TT20251017. 你也喜欢深度学习吗?1
你也喜欢深度学习吗?1
题目描述
在深度学习中,张量(多维数组)的形状变化是非常常见且重要的操作。为了帮助初学者更好地理解各种张量操作,本题要求你模拟一个简单的深度学习网络中张量形状的变化过程。
张量本质上是一个多维数组,但是它的shape可以用一个一维数组表示。
本题重点讨论的是张量的shape。
网络共包含 n 层,每一层都是一个计算层,用于对输入张量进行变换。最开始,网络接收一个一维向量,长度为 m(即形状为 [m]
)。之后,每一层会对当前张量执行下列五种操作之一(输入时每一层给出一个字符串表示操作和参数):
-
将当前张量重塑为形状为
(a₁, a₂, ..., aₖ)
的张量,要求新形状各维度的乘积必须等于。若不满足,则视为非法操作。 -
将当前张量的维度按照给定顺序
p₁, p₂, ..., p_d
进行置换,其中d
为当前张量的维数,且(p₁, p₂, ..., p_d)
是{1, 2, ..., d}
的一个排列。 例如,若当前张量形状为(2, 3, 4)
,执行transpose 3 1 2
后,张量形状变为(4, 2, 3)
。 -
将当前张量展平为一个一维向量,其长度为当前张量所有维度之积。
例如,形状
(4, 2, 3)
经 flatten 后变为(24)
。
如果在某一层中操作不合法(例如,reshape
的新形状乘积与原张量元素总数不等,或transpose
的维度数量必须与上一个操作后的向量维度不对应),则该层以及后续层都不再执行,且所有后续的查询输出均为 INVALID
。
网络执行完毕后,你将收到 q 个查询,每个查询给出一个整数 x,表示询问网络经过前 x 层后张量的形状(注意:x = 0
表示查询初始张量的形状)。
格式
输入格式
- 第一行输入三个整数:
n
、q
和m
(),分别表示网络层数、查询次数和初始向量的长度。 - 接下来的
n
行,每行描述一层的操作,格式为上述三种操作之一,其中,。 - 接下来的
q
行,每行包含一个整数x
(),表示查询网络经过前x
层之后张量的形状。
输出格式
输出 行,每行都输出向量 的形状(输出时多个整数间用空格隔开,并且按照顺序输出),非法状态就输出INVALID
。
样例
3 4 24
reshape 3 2 3 4
transpose 3 3 1 2
flatten
0
1
2
3
24
2 3 4
4 2 3
24
样例解释
- 初始张量:形状为
[24]
(即一个长度为 24 的一维向量)。 - 第 1 层:
reshape 2 3 4
将[24]
变为(2, 3, 4)
(满足 2×3×4=24)。 - 第 2 层:
transpose 3 1 2
将(2, 3, 4)
置换为(4, 2, 3)
。 - 第 3 层:
flatten
将(4, 2, 3)
展平为一维向量(24)
。
相关
在下列比赛中: