pytorch 如何更改torch.nn.Linear的输出大小,同时保留现有参数?

niknxzdl  于 2023-06-23  发布在  其他
关注(0)|答案(1)|浏览(156)

我正在编写一个PyTorch模型,其中包括以下内容:

self.basis_mat=torch.nn.Linear(
in_features=self.basis_mat_params[0],
out_features=self.basis_mat_params[1],
bias=self.basis_mat_params[2]).to(device)

现在我想做的是动态递增self.basis_matout_features。然而,我也想保留任何以前训练过的参数。换句话说,我们随机初始化任何新参数,而其余参数不变,而out_features在模型中递增。
那我该怎么办
我真的不知道该尝试什么...我检查了the documentation,但结果是在torch.nn.Linear中参数out_features是不可更改的,如果我示例化一个新的torch.nn.Linear(我想这会很慢,所以即使类似的东西也能工作,我也只会把它作为最后的手段),参数是内置的,随机的,不可调整的。

lnlaulya

lnlaulya1#

您可以执行以下操作,

from torch import nn
import torch 
dim1 = 3
dim2 = 4 
dim3 = 5 
older_weight_parameters = torch.zeros( dim1, dim2) # replace this with older parameters, older_linear_layer.weight.t().detach()
older_bias_parameters = torch.zeros( dim2) # replace this with older parameters, older_linear_layer.bias.detach()

linear_layer = nn.Linear(dim1, dim2 + dim3)
# This will fill the corresponding parameters with the older parameter values
linear_layer.weight.data[:dim2, :] = older_weight_parameters.t()
linear_layer.bias.data[:dim2] = older_bias_parameters

然后,线性层将具有以下权重和偏置参数值。您可以看到旧参数的值(在示例中这些值为零)已经替换了相应位置的随机参数。

linear_layer.weight, linear_layer.bias
(Parameter containing:
 tensor([[ 0.0000,  0.0000,  0.0000],
         [ 0.0000,  0.0000,  0.0000],
         [ 0.0000,  0.0000,  0.0000],
         [ 0.0000,  0.0000,  0.0000],
         [ 0.3455, -0.3385,  0.4746],
         [-0.2067, -0.4950, -0.3668],
         [-0.4012, -0.3951, -0.3772],
         [-0.1393,  0.3602, -0.0460],
         [-0.4641,  0.2152,  0.4031]], requires_grad=True),
 Parameter containing:
 tensor([ 0.0000,  0.0000,  0.0000,  0.0000,  0.0502, -0.3423,  0.3871, -0.5218,
         -0.4322], requires_grad=True)

线性层的权重和偏移参数与任何其他Tensor类似。你可以对它使用Tensor操作。

相关问题