张量列车表示

class TensorTrainRepresentation(assignment: Tensor | None = None, num_cores: int = 3, ranks: int | Sequence[int] = 2, bases: str | X | type[X] | None | Sequence[str | X | type[X] | None] = None, bases_kwargs: Mapping[str, Any] | None | Sequence[Mapping[str, Any] | None] = None, **kwargs)[source]

基础类:Representation

表示的张量分解。

在没有提供分配的情况下,这对应于https://assets.amazon.science/5c/0f/dd3eb08c4df88f2b4722e5fa8a7c/nimble-gnn-embedding-with-tensor-train-decomposition.pdf中描述的TT-emb

其中

\[\mathbf{A}[i_1 \cdot \ldots \cdot i_k, j_1 \cdot \ldots \cdot j_k] = \sum_{r_i, \ldots, r_k} \mathbf{G}_1[0, i_1, j_1, r_1] \cdot \mathbf{G}_2[r_1, i_2, j_2, r_2] \cdot \ldots \cdot \mathbf{G}_k[r_k, i_k, j_k, 0]\]

使用形状为 \(R_{i-1} \times m_i \times n_i \times R_i\) 的 TT 核心 \(\mathbf{G}_i\),并且 \(R_0 = R_d = 1\)

论文中的另一个变体使用了基于层次拓扑聚类的分配方法。

初始化表示。

Parameters:
  • assignment (LongTensor | None) – 形状: (max_id, num_cores) 每个层级的分配

  • num_cores (int) – 使用的核心数量

  • ranks (OneOrSequence[int]) – 长度: num_cores - 1 各个等级。注意 \(R_0 = R_d = 1\) 不应包含在内

  • bases (OneOrManyHintOrType) – 每个级别的基础表示,或其提示。

  • bases_kwargs (OneOrManyOptionalKwargs) – 基于关键字的参数用于bases

  • kwargs – 传递给 Representation.__init__() 的额外基于关键字的参数

Raises:

ValueError – 如果对排名或分配的输入验证失败

方法总结

check_assignment(assignment, max_id, ...)

检查分配是否与其他属性匹配。

check_factors(ms, ns, max_id, shape, num_cores)

检查因素是否与其他部分匹配。

create_default_assignment(max_id, num_cores, ms)

创建一个不使用结构信息的赋值。

factor_sizes(max_id, shape, num_cores)

将表示形状分解为核心的小形状。

get_shapes_and_einsum_eq(ranks, ns)

确定核心形状和einsum方程。

iter_extra_repr()

遍历组件以用于 extra_repr()

方法文档

static check_assignment(assignment: Tensor, max_id: int, num_cores: int, ms: Sequence[int])[来源]

检查分配是否与其他属性匹配。

Parameters:
  • assignment (Tensor) – 形状: (max_id, num_cores) 分配

  • max_id (int) – 表示的数量

  • num_cores (int) – 张量训练核心的数量

  • ms (Sequence[int]) – 各个大小 \(m_i\)

Raises:

ValueError – 如果赋值无效

static check_factors(ms: Sequence[int], ns: Sequence[int], max_id: int, shape: tuple[int, ...], num_cores: int)[source]

检查因素是否与其他部分匹配。

验证

\[\prod \limits_{m_i \in ms} m_i \geq M \prod \limits_{n_i \in ns} n_i \geq N\]
Parameters:
  • ms (Sequence[int]) – 长度: num_cores \(M\) 因子 \(m_i\)

  • ns (Sequence[int]) – 长度: num_cores \(N\) 个因子 \(n_i\)

  • max_id (int) – 最大id,\(M\)

  • 形状 (元组[整数, ...]) – 形状,\(N=prod(shape)\)

  • num_cores (int) – 核心数量

Raises:

ValueError – 如果任何条件被违反

static create_default_assignment(max_id: int, num_cores: int, ms: Sequence[int]) Tensor[source]

创建一个不使用结构信息的赋值。

Parameters:
  • max_id (int) – 表示的数量

  • num_cores (int) – 张量核心的数量

  • ms (Sequence[int]) – 大小 \(m_i\)

Returns:

形状: (max_id, num_cores) 分配

Return type:

Tensor

classmethod factor_sizes(max_id: int, shape: Sequence[int], num_cores: int) tuple[Sequence[int], Sequence[int]][source]

将表示形状分解为核心的小形状。

Parameters:
  • max_id (int) – 表示的数量,“行数”,\(M\)

  • shape (Sequence[int]) – 单个表示的形状,“列数”,\(N\)

  • num_cores (int) – 核心数量,\(k\)

Returns:

一个长度为\(k\)的正整数序列的元组(ms, ns)满足

\[ \begin{align}\begin{aligned}\prod \limits_{m_i \in ms} m_i \geq M\\\prod \limits_{n_i \in ns} n_i \geq N\end{aligned}\end{align} \]

Return type:

tuple[Sequence[int], Sequence[int]]

static get_shapes_and_einsum_eq(ranks: Sequence[int], ns: Sequence[int]) tuple[str, Sequence[tuple[int, ...]]][源代码]

确定核心形状和einsum方程。

Parameters:
Returns:

一对 (eq, shapes),其中 eq 是一个有效的 einsum 方程,shapes 是一系列表示形状的序列。请注意,这些形状不包括结果嵌入的“max_id 维度”。

Return type:

tuple[str, Sequence[tuple[int, …]]]

iter_extra_repr() Iterable[str][来源]

遍历组件以用于 extra_repr()

Return type:

Iterable[str]