实用工具

神经网络组件的实用工具。

exception ShapeError(shape: Sequence[int], reference: Sequence[int])[source]

形状不匹配的错误。

初始化错误。

Parameters:
  • shape (Sequence[int]) – 不匹配的形状

  • 参考 (序列[int]) – 预期的形状

Return type:

classmethod verify(shape: int | Sequence[int], reference: int | Sequence[int] | None) Sequence[int][source]

如果形状与参考不匹配,则引发异常。

此方法首先对形状进行归一化处理。

Parameters:
  • shape (int | Sequence[int]) – 要检查的形状

  • 参考 (int | Sequence[int] | None) – 参考形状。如果为None,则形状始终匹配。

Raises:

ShapeError – 如果两个形状不匹配。

Returns:

归一化的形状

Return type:

Sequence[int]

adjacency_tensor_to_stacked_matrix(num_relations: int, num_entities: int, source: Tensor, target: Tensor, edge_type: Tensor, edge_weights: Tensor | None = None, horizontal: bool = True) Tensor[source]

堆叠邻接矩阵,如[thanapalasingam2021]中所述。

此方法将形状为(num_entities, num_relations, num_entities)的(稀疏)邻接张量重新排列为形状为(num_entities, num_relations * num_entities)(水平堆叠)或(num_entities * num_relations, num_entities)(垂直堆叠)的稀疏邻接矩阵。因此,我们可以通过一次稀疏矩阵乘法(以及一些额外的预处理和/或后处理)来执行R-GCN的关系特定消息传递。

Parameters:
  • num_relations (int) – 关系的数量

  • num_entities (int) – 实体的数量

  • source (Tensor) – 形状: (num_triples,) 源实体索引

  • target (Tensor) – 形状: (num_triples,) 目标实体索引

  • edge_type (Tensor) – 形状: (num_triples,) 边的类型,即关系ID

  • edge_weights (Tensor | None) – 形状: (num_triples,) 标量边权重

  • 水平 (bool) – 是否使用水平或垂直堆叠

Returns:

形状:(num_entities * num_relations, num_entities)(num_entities, num_entities * num_relations) 堆叠的邻接矩阵

Return type:

Tensor

apply_optional_bn(x: Tensor, batch_norm: BatchNorm1d | None = None) Tensor[source]

应用可选的批量归一化。

支持多个批次维度。

Parameters:
  • x (Tensor) – 形状: (..., d)` 输入张量。

  • batch_norm (BatchNorm1d | None) – 一个可选的批量归一化层。

Returns:

形状: (..., d)` 归一化后的张量。

Return type:

Tensor

safe_diagonal(matrix: Tensor) Tensor[source]

从潜在的稀疏矩阵中提取对角线。

注意

这是一个临时的解决方案,因为torch.diagonal()不适用于稀疏张量

Parameters:

matrix (Tensor) – 形状: (n, n) 矩阵

Returns:

形状: (n,) 对角线值。

Return type:

Tensor

use_horizontal_stacking(input_dim: int, output_dim: int) bool[源代码]

根据输入和输出维度确定堆叠方向。

垂直堆叠方法适用于低维输入和高维输出,因为首先进行的是向低维的投影。而水平堆叠方法则适用于高维输入和低维输出,因为最后进行的是向高维的投影。

Parameters:
  • input_dim (int) – 层的输入维度

  • output_dim (int) – 层的输出维度

Returns:

是否使用水平(True)或垂直堆叠

Return type:

bool

另请参阅

[thanapalasingam2021]

四元数的实用工具。

hamiltonian_product(qa: Tensor, qb: Tensor) Tensor[source]

计算两个四元数的哈密顿积(这可以实现旋转)。

Parameters:
Return type:

Tensor

multiplication_table() Tensor[source]

创建四元数基乘法表。

Returns:

形状: (4, 4, 4) 基元素乘积表。

Return type:

Tensor

..参见:: https://en.wikipedia.org/wiki/Quaternion#Multiplication_of_basis_elements

normalize(x: Tensor) Tensor[source]

如果尚未应用前向约束,则对关系向量的长度进行归一化。

四元数的绝对值

\[|a + bi + cj + dk| = \sqrt{a^2 + b^2 + c^2 + d^2}\]

四元数向量的L2范数:

\[\|x\|^2 = \sum_{i=1}^d |x_i|^2 = \sum_{i=1}^d (x_i.re^2 + x_i.im_1^2 + x_i.im_2^2 + x_i.im_3^2)\]
Parameters:

x (Tensor) – 形状: (*batch_dims, 4 \cdot d) 以扁平形式表示的向量。

Returns:

形状: (*batch_dims, 4 \cdot d) 归一化向量。

Return type:

Tensor