jittor.einops

这里是Jittor的einops模块的API文档,您可以通过from jittor import einops来获取该模块。

exception jittor.einops.EinopsError[源代码]

Runtime error thrown by einops

jittor.einops.asnumpy(tensor) numpy.ndarray[源代码]

将一个张量转换为numpy.ndarray

参数:
  • tensor (Var): 输入张量

返回值:

输入张量转换后得到的numpy.ndarray

代码示例:
>>> from jittor import einops
>>> einops.asnumpy(jt.ones(3,3)) 
array([[1., 1., 1.],
    [1., 1., 1.],
    [1., 1., 1.]], dtype=float32)
jittor.einops.parse_shape(x, pattern: str) dict[源代码]

将张量形状解析为字典,将轴名称映射到其长度。

参数:
  • x (Var): 输入张量

  • pattern (str): 字符串, 轴的空格分隔名称,下划线表示跳过轴

返回值:
  • output (dict): 字典,将轴名称映射到它们的长度

代码示例:
>>> x = jt.zeros([2, 3, 5, 7]) # 使用下划线 _ 来在解析时跳过维度
>>> parse_shape(x, 'batch _ h w')
{'batch': 2, 'h': 5, 'w': 7}
# `parse_shape`输出可用于指定其他操作的axes_lalength:
>>> y = jt.zeros([700])
>>> rearrange(y, '(b c h w) -> b c h w', **parse_shape(x, 'b _ h w')).shape
(2, 10, 5, 7)
jittor.einops.rearrange(tensor: Tensor | List[Tensor], pattern: str, **axes_lengths) Tensor[源代码]

对多维张量进行智能、易读的元素重排的操作。此操作包括转置(轴置换)、重塑(视图)、挤压、展开、堆叠、连接等操作。

参数:
  • tensor (Union[Var, List[Var]]): 支持的任何库(例如 numpy.ndarray, jittor.Var)的张量,或相同类型和形状的张量列表。

  • pattern (str): 重排模式的字符串描述。

  • axes_lengths: 对维度的额外说明,可选。

返回值:

返回与输入相同类型的张量。尽可能返回原始张量的视图。

代码示例:
>>> from jittor import einops 
>>> import numpy as np
# 假设有32张 30x40x3 大小的图像
>>> images = [np.random.randn(30, 40, 3) for _ in range(32)]
# 沿批量轴堆叠,输出单一数组
>>> einops.rearrange(images, 'b h w c -> b h w c').shape
(32, 30, 40, 3)
# 沿高度轴拼接,输出 960x40x3
>>> einops.rearrange(images, 'b h w c -> (b h) w c').shape
(960, 40, 3)
# 沿宽度轴拼接,输出 30x1280x3
>>> einops.rearrange(images, 'b h w c -> h (b w) c').shape
(30, 1280, 3)
# 轴重排为 'b c h w' 格式
>>> einops.rearrange(images, 'b h w c -> b c h w').shape
(32, 3, 30, 40)
# 每个图像展平为矢量,输出 32x3600
>>> einops.rearrange(images, 'b h w c -> b (c h w)').shape
(32, 3600)
# 将图像分为4个较小的(左上、右上、左下、右下)部分,输出 128x15x20x3
>>> einops.rearrange(images, 'b (h1 h) (w1 w) c -> (b h1 w1) h w c', h1=2, w1=2).shape
(128, 15, 20, 3)
jittor.einops.reduce(tensor: Tensor, pattern: str, reduction: str | Callable[[Tensor, List[int]], Tensor], **axes_lengths: int) Tensor[源代码]

重新排序和reduce的组合操作。

参数:
  • tensor (Var): 输入张量

  • pattern (str): 字符串, 减少模式

  • reduction (str): 减少操作,可用约简(’min’、’max’、’sum’、’mean’、’prod’)之一

  • axes_lengths (int): 轴长度

返回值:
  • output (Var): 重塑后的张量

代码示例:
>>> x = jt.randn(100, 32, 64)
# 在第一个轴上执行最大值归约
>>> y = reduce(x, 't b c -> b c', 'max')
# 与前面相同,但轴的含义更清晰
>>> y = reduce(x, 'time batch channel -> batch channel', 'max')
>>> x = jt.randn(10, 20, 30, 40)
# 使用2*2的核大小进行2D最大池化,用于图像处理
>>> y1 = reduce(x, 'b c (h1 h2) (w1 w2) -> b c h1 w1', 'max', h2=2, w2=2)
# 如果想恢复到原始的高度和宽度,可以应用深度到空间的技巧
>>> y2 = rearrange(y1, 'b (c h2 w2) h1 w1 -> b c (h1 h2) (w1 w2)', h2=2, w2=2)
>>> assert parse_shape(x, 'b _ h w') == parse_shape(y2, 'b _ h w')
# 自适应2D最大池化到3*4的网格
>>> reduce(x, 'b c (h1 h2) (w1 w2) -> b c h1 w1', 'max', h1=3, w1=4).shape
(10, 20, 3, 4)
# 全局平均池化
>>> reduce(x, 'b c h w -> b c', 'mean').shape
(10, 20)
# 为每个通道减去批次上的均值
>>> y = x - reduce(x, 'b c h w -> () c () ()', 'mean')
# 为每个图像的每个通道减去均值
>>> y = x - reduce(x, 'b c h w -> b c () ()', 'mean')
jittor.einops.repeat(tensor: Tensor, pattern: str, **axes_lengths) Tensor[源代码]

以任意组合的方式重新排序和重复元素。该操作包括 repeat、tile 和 broadcast 函数的功能。

参数:
  • tensor (Union[Var, List[Var]]): 支持的任何库(例如 numpy.ndarray, jittor.Var)的张量,或相同类型和形状的张量列表。

  • pattern (str): 重排模式的字符串描述。

  • axes_lengths: 维度的额外规格说明。

返回值:
  • 返回与输入相同类型的张量。如果可能,返回指向原始张量的视图。

代码示例:
>>> from jittor import einops 
>>> import numpy as np
# 灰度图像(30x40)
>>> image = np.random.randn(30, 40)
# 转换为 RGB 格式
>>> einops.repeat(image, 'h w -> h w c', c=3).shape
(30, 40, 3)
# 沿高度轴重复 2 次
>>> einops.repeat(image, 'h w -> (repeat h) w', repeat=2).shape
(60, 40)
# 沿高度和宽度分别重复 2 次和 3 次
>>> einops.repeat(image, 'h w -> (h2 h) (w3 w)', h2=2, w3=3).shape
(60, 120)
# 放大图像 2 倍
>>> einops.repeat(image, 'h w -> (h h2) (w w2)', h2=2, w2=2).shape
(60, 80)
# 缩小后放大图像
>>> downsampled = einops.reduce(image, '(h h2) (w w2) -> h w', 'mean', h2=2, w2=2)
>>> einops.repeat(downsampled, 'h w -> (h h2) (w w2)', h2=2, w2=2).shape
(30, 40)