jittor.einops
这里是Jittor的einops模块的API文档,您可以通过from jittor import 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)