You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PyTorch:参数矩阵双维度扩展及特定参数张量重复变换(支持autograd)

问题1:如何在PyTorch中将parameter matrix沿两个维度重复,得到更大的矩阵?

你可以直接用PyTorch内置的torch.Tensor.repeat()方法,它支持对指定维度重复任意次数,并且完全兼容autograd,梯度可以正常反向传播到原参数张量。

举个例子,假设你有一个2×2的参数矩阵,想要沿行重复2次、列重复3次,得到4×6的矩阵:

import torch

# 定义参数矩阵
param = torch.nn.Parameter(torch.randn(2, 2))
# 沿行维度(第0维)重复2次,列维度(第1维)重复3次
expanded_matrix = param.repeat(2, 3)

repeat()的参数是每个维度的重复次数,顺序对应张量的维度顺序(对于2D张量就是行、列)。这个操作不会破坏计算图,原参数的梯度会正确回传。


问题2:将2D parameter tensor按A A B B;A A B B;C C D D;C C D D的形式变换,最简语法是什么?

假设你的原参数张量是2×2的结构:[[A, B], [C, D]],要得到目标的4×4矩阵,有两种简洁的可微分实现方式:

方法1:使用repeat_interleave

repeat_interleave会对指定维度的每个元素单独重复,刚好匹配我们的需求:

import torch

param = torch.nn.Parameter(torch.tensor([[1., 2.], [3., 4.]]))  # A=1, B=2, C=3, D=4
# 先对行维度(dim=0)每个行重复2次,再对列维度(dim=1)每个元素重复2次
transformed = param.repeat_interleave(2, dim=0).repeat_interleave(2, dim=1)

方法2:两次使用repeat

先重复行维度,再重复列维度,结果和上面一致:

# 先沿行重复2次(得到4×2的张量),再沿列重复2次(得到4×4的目标张量)
transformed = param.repeat(2, 1).repeat(1, 2)

这两种方法都是PyTorch的内置可微分操作,完全支持autograd,梯度可以从变换后的张量反向传播到原参数张量,不会有任何问题。


内容的提问来源于stack exchange,提问作者zfz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 08:10:24